阻塞模式是否将该特定任务置于“进程等待”状态,因为我认为非阻塞套接字需要显式来自用户的“忙等待”或“自旋锁定”实现。或者阻塞模式套接字只不过是内核忙等待的隐式实现。
在信号量/互斥锁/监视器等锁定机制中,通常通过在阻塞状态下推送任务来实现锁定。我认为如果锁定可以做到这一点,那么套接字锁定也可能以同样的方式实现。
我不确定,我认为轮询不是一种有效的方式,特别是对于内核而言,因为内核总是掌握着很多任务。
THX。
答案 0 :(得分:9)
不,内核中实现了阻塞套接字。进程处于非执行状态,不占用任何CPU时间。
内核可以自由运行其他任务,直到某些外部活动会导致其唤醒任务。例如,网卡的硬件中断让它知道有数据要读取。内核读取它并将其推送到网络堆栈,最终唤醒应用程序以处理数据。
定时器的工作方式相同,但定时器中断。
内核可能实际上是在硬件下轮询硬件,但它不一定是......这完全取决于硬件的设计方式。
答案 1 :(得分:1)
答案 2 :(得分:0)
基于我从net / book /中获得的答案。我会努力做到这一点。
默认情况下,所有套接字都是阻塞的。这意味着当我们发出无法立即完成的套接字调用时,我们的进程将进入休眠状态,等待条件成立。 unp - p435
通过将进程置于等待/阻塞状态来实现休眠。调度程序检查条件是否阻止进程,当被阻止的进程转向时,即调度程序给他CPU时。这种情况下的响应能力取决于调度程序的时间分辨率。
因此,阻塞调用不是来自内核的“忙等待”或“自旋锁”的隐式实现。
是的,大多数实现的基本锁定机制都是一样的。将进程置于阻塞/等待状态。
当然轮询效率不高,即为什么使用轮询不会实现阻止。