最近来到一个大公司,真的忙了起来,但是都是忙的什么?自己也不清楚,反正一堆的事情要熟悉。不像老公司那样,已经是主要负责人了,只要交代一下就行了,这里很多事情是别人给你交代一下,就自己去做吧。自立性明显需要提高,而且也不会有谁主动为你做些什么?加油,没什么好说的,过了试用期自然就熟悉了。

来自 “ ITPUB博客 ” ,链接:http://blog.itpub.net/15116811/viewspace-607254/,如需转载,请注明出处,否则将追究法律责任。

转载于:http://blog.itpub.net/15116811/viewspace-607254/

根据原作 https://pan.quark.cn/s/459657bcfd45 的源码改编 Classic-ML-Methods-Algo 引言 建立这个项目,是为了梳理和总结传统机器学习(Machine Learning)方法(methods)或者算法(algo),和各位同仁相互学习交流. 现在的深度学习本质上来自于传统的神经网络模型,很大程度上是传统机器学习的延续,同时也在不少时候需要结合传统方法来实现. 任何机器学习方法基本的流程结构都是通用的;使用的评价方法也基本通用;使用的一些数学知识也是通用的. 本文在梳理传统机器学习方法算法的同时也会顺便补充这些流程,数学上的知识以供参考. 机器学习 机器学习是人工智能(Artificial Intelligence)的一个分支,也是实现人工智能最重要的手段.区别于传统的基于规则(rule-based)的算法,机器学习可以从数据中获取知识,从而实现规定的任务[Ian Goodfellow and Yoshua Bengio and Aaron Courville的Deep Learning].这些知识可以分为四种: 总结(summarization) 预测(prediction) 估计(estimation) 假想验证(hypothesis testing) 机器学习主要关心的是预测[Varian在Big Data : New Tricks for Econometrics],预测的可以是连续性的输出变量,分类,聚类或者物品之间的有趣关联. 机器学习分类 根据数据配置(setting,是否有标签,可以是连续的也可以是离散的)和任务目标,我们可以将机器学习方法分为四种: 无监督(unsupervised) 训练数据没有给定...
03-12
<think>好的,用户让我介绍一下“等”,也就是等待。首先,我得确保自己对这个概念有准确的理解,然后再用中文清晰解释出来。 等待,英文是busy waiting,属于计算机科学里的术语,尤其是在操作系统和并发编程中常见。记得它指的是一个进程或线程在等待某个条件满足时,持续占用CPU资源进行循环检查,而不是释放CPU让其他任务运行。这种情况会导致CPU资源浪费,因为线程在空转,没有实际工作进展。 接下来,我需要分步骤组织回答。首先定义等待,然后解释其原理,接着举例子,比如自旋锁,再说明它的优缺点,最后给出替代方案。用户可能想知道为什么有时候用等待,尽管它效率低,可能是在学习操作系统或并发时遇到了这个问题,或者在实际编程中遇到了性能问题。 需要确保例子简单易懂,比如用代码片段说明自旋锁的实现,这样用户能直观理解。同时,要提到自旋锁在特定场景下的优势,比如多核系统中等待时间短的情况,避免用户误解等待完全无用。 另外,要强调等待的缺点,尤其是单核系统中的问题,比如优先级反转。然后,对比其他同步机制如信号量、条件变量,说明它们如何让出CPU,提高效率。这部分需要结构清晰,逐步推进,让用户了解不同方法的适用场景。 还要注意使用正确的LaTeX格式,比如行内公式用$...$,独立公式用$$...$$。比如提到自旋锁时,可以写一个简单的循环检查的伪代码,用行内代码格式。不过用户没有要求代码,所以可能不需要,但例子部分可以用文字描述。 需要检查是否有技术细节错误,比如自旋锁在用户态是否适用,或者内核中的使用情况。确保信息准确,比如现代操作系统中的自旋锁实现可能会结合让出CPU或休眠的策略,避免长期等。这可能也是用户想了解的优化方法。 最后,总结等待的应用场景和替代方案,帮助用户全面理解何时该用,何时不该用。可能用户需要的是解决问题的实际建议,所以替代方案部分要具体,比如信号量、事件驱动等,并说明它们如何避免CPU浪费。 总之,回答需要结构清晰,从定义到例子,再到优缺点,最后解决方案,确保用户能逐步理解等待的概念和相关知识。同时,使用中文口语化表达,避免过于学术化的术语,让解释更易懂。</think>等待(Busy Waiting)是计算机科学中一种资源调度策略,尤其在并发编程和操作系统中常见。其核心特征是:**线程/进程在等待条件满足时,持续占用 CPU 资源进行循环检查,而非释放 CPU 给其他任务**。 --- ### 一、等待的原理 1. **基本行为** 当一个线程需要等待某条件(如锁释放、信号触发或共享资源就绪)时,它会通过循环语句(如 `while`)反复检查条件状态,例如: ```c while (锁未被释放) { // 空循环,持续检查条件 } ``` 2. **资源占用** 循环过程中 CPU 始终在执行空检查指令,导致 CPU 时间片被占用,无法分配给其他任务。 --- ### 二、典型应用场景:自旋锁(Spinlock) 自旋锁是等待的典型实现,常见于多核系统: - **行为**:线程在获取锁失败时,持续循环尝试(“自旋”)而非休眠。 - **适用场景**:等待时间极短(如几十纳秒),且线程不希望因休眠/唤醒产生上下文切换开销。 - **代码示例**(伪代码): ```c void spin_lock(int *lock) { while (*lock != 0) { // 等待 // 空循环,直到锁被释放 } *lock = 1; // 获取锁 } ``` --- ### 三、等待的优缺点 | **优点** | **缺点** | |------------------------------|---------------------------------------| | 1. 无上下文切换开销(速度快) | 1. 浪费 CPU 资源(空转) | | 2. 适用于极短等待场景 | 2. 单核系统中可能死锁(需禁用中断) | | 3. 实现简单 | 3. 可能引发优先级反转问题 | --- ### 四、替代方案:非等待(Non-Busy Waiting) 为避免 CPU 浪费,可通过以下方式让出资源: 1. **信号量(Semaphore)** 线程在等待时主动休眠,由信号量唤醒。 2. **条件变量(Condition Variable)** 结合互斥锁使用,调用 `wait()` 让出 CPU。 3. **事件驱动(Event-driven)** 通过回调或异步通知机制响应条件变化。 --- ### 五、关键总结 - **使用等待的条件**:多核系统 + 预期等待时间极短(否则优先选择非等待)。 - **优化方向**:现代操作系统的自旋锁会混合等待与短暂休眠(如 `pause` 指令),以平衡效率与资源占用。 如果需要更具体的代码示例或场景分析,请进一步说明!
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值