Viv*_*rma 22 c linux operating-system
这是对我之前的问题的延伸
我现在从互联网收集的内容,所有调用阻塞调用的进程都会进入休眠状态,直到调度程序找到解除阻塞的原因.原因可以从缓冲区空到缓冲区满到任何其他条件.
但是,这可以成为实时的有效方式,让我们说硬/实时应用程序?由于当解除阻塞条件成立时,进程未被解锁,而是当调度程序给出他的CPU切片时,并且解除阻塞条件都为真.
好像你想要一个响应式解决方案,我不这样做"旋转锁"或"忙等待"是正确的方法,CPU切片被浪费,整个系统将无法响应或可能响应不佳.
有人可以清楚这个相互矛盾的想法.
Chr*_*isW 40
在调度程序唤醒你之前一直睡觉是正常/首选的事情.
旋转(等待的替代方式,不睡觉)不太常见,并具有以下效果:
保持CPU忙,并防止其他线程使用CPU(直到/除非旋转线程完成其时间片并被预先设定)
你正在等待的事情发生的那一刻就可以停止旋转(因为你不断检查那个事件,你不需要花时间醒来,因为你已经醒了)
不调用进入睡眠状态并再次唤醒所需的CPU结构
如果延迟的长度非常短(例如,如果延迟仅执行100个CPU指令所花费的时间),则旋转可以比进入睡眠更有效(更少的总CPU ).
首先,你有一个错误的认识:
阻塞调用不是“忙等待”或“自旋锁”。阻塞调用是可睡眠的——这意味着 CPU 可以处理其他任务,不会浪费 CPU。
关于你关于拦截来电的问题
阻塞调用更容易——它们更容易理解、更容易开发、更容易调试。
但他们是资源消耗者。如果不使用线程,就会阻塞其他客户端;如果使用线程,每个线程都会占用内存和其他系统资源。即使你有足够的内存,切换线程也会使缓存变冷并降低性能。
这是一个权衡——更快的开发和可维护性?或可扩展性。
| 归档时间: |
|
| 查看次数: |
26764 次 |
| 最近记录: |