这是我之前问题的延伸
unix/linux 套接字中的阻塞模式如何工作? https://stackoverflow.com/questions/1107391/how-does-blocking-mode-in-unix-linux-sockets-works
我现在从互联网上收集到的信息是,所有调用阻塞调用的进程都会进入睡眠状态,直到调度程序找到解除阻塞的原因。原因可能多种多样,从缓冲区空到缓冲区满,再到任何其他情况。
但是,这是否是一种有效的实时方式,比如说硬实时应用程序?因为当解除阻塞条件成立时,进程不会解除阻塞,而是当调度程序给他他的 CPU 切片,并且解除阻塞条件都成立时,进程不会解除阻塞。
就好像你想要一个响应式解决方案一样,我不认为“自旋锁”或“忙等待”是正确的方法,CPU 切片被浪费了,总体而言系统将变得无响应或可能很差 -反应灵敏。
有人可以澄清这些相互矛盾的想法吗?
睡觉直到调度程序叫醒你是正常/首选的事情。
旋转(不睡觉的另一种等待方式)不太常见,具有以下效果:
如果延迟的长度为very短(例如,如果延迟仅为执行 100 个 CPU 指令所需的时间)。
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)