2009-07-10 73 views
2

阻塞模式是否将该特定任务置于“进程等待”状态,因为我认为非阻塞套接字需要明确来自用户的“忙等待”或“自旋锁定”实现。或者阻塞模式套接字只不过是内核忙碌等待的隐含实现。unix/linux套接字中的阻塞模式是如何工作的?

在信号量/互斥/监视器等锁定机制中,通常通过将任务推入阻塞状态来实现锁定。我认为如果锁定可能会发生这种情况,那么也可以通过同样的方式实现套接字锁定。

我不知道,我认为轮询不是一种有效的方式,特别是内核,因为内核总是有他的双手充满了这么多的任务。

thx。

回答

0

基于我从网/书中学到/和提供的答案。我会尽力做到这一点。

默认情况下,所有套接字都被阻塞。这意味着,当我们发出一个无法立即完成的套接字调用时,我们的进程就会进入休眠状态,等待条件成立。 unp - p435

睡眠通过将进程置于等待/阻塞状态来实现。调度程序检查是否阻止进程的条件,当阻塞的进程转向时,即调度程序给他CPU时。在这种情况下的响应性取决于调度程序的时间分辨率。

因此,阻塞调用并不是隐式实现内核中的“忙等待”或“旋转锁定”。

锁定的基本机制对于大多数实现是相同的。将进程置于阻塞/等待状态。

当然,轮询效率不高,也就是说为什么不使用轮询实现阻止。

8

不,内核中实现了阻塞套接字。该进程处于非执行状态,并且不消耗任何CPU时间。

内核可以自由运行其他任务,直到某些外部活动导致它将任务唤醒。例如,网卡的硬件中断让它知道有数据要被读取。内核读取它并将其推送通过网络堆栈,最终唤醒应用程序以处理数据。

定时器将以相同的方式工作,但带有定时器中断。

内核可能实际上是硬件投票硬件,但它不一定是......这都是硬件设计的问题。

+0

@Chris - 什么是“搁置”。一个进程必须在其中一个州。通过“搁置”你的意思是等待状态,但这是我问的问题。我自己也不知道,因为我认为轮询并不是一种有效的方式,特别是内核,特别是当内核总是让他的手充满这么多的时候。 – 2009-07-10 03:23:07