2009-07-10 44 views
2

阻塞模式是否將該特定任務置於「進程等待」狀態,因爲我認爲非阻塞套接字需要明確來自用戶的「忙等待」或「自旋鎖定」實現。或者阻塞模式套接字只不過是內核忙碌等待的隱含實現。unix/linux套接字中的阻塞模式是如何工作的?

在信號量/互斥/監視器等鎖定機制中,通常通過將任務推入阻塞狀態來實現鎖定。我認爲如果鎖定可能會發生這種情況,那麼也可以通過同樣的方式實現套接字鎖定。

我不知道,我認爲輪詢不是一種有效的方式,特別是內核,因爲內核總是有他的雙手充滿了這麼多的任務。

thx。

回答

0

基於我從網/書中學到/和提供的答案。我會盡力做到這一點。

默認情況下,所有套接字都被阻塞。這意味着,當我們發出一個無法立即完成的套接字調用時,我們的進程就會進入休眠狀態,等待條件成立。 unp - p435

睡眠通過將進程置於等待/阻塞狀態來實現。調度程序檢查是否阻止進程的條件,當阻塞的進程轉向時,即調度程序給他CPU時。在這種情況下的響應性取決於調度程序的時間分辨率。

因此,阻塞調用並不是隱式實現內核中的「忙等待」或「旋轉鎖定」。

鎖定的基本機制對於大多數實現是相同的。將進程置於阻塞/等待狀態。

當然,輪詢效率不高,也就是說爲什麼不使用輪詢實現阻止。

8

不,內核中實現了阻塞套接字。該進程處於非執行狀態,並且不消耗任何CPU時間。

內核可以自由運行其他任務,直到某些外部活動導致它將任務喚醒。例如,網卡的硬件中斷讓它知道有數據要被讀取。內核讀取它並將其推送通過網絡堆棧,最終喚醒應用程序以處理數據。

定時器將以相同的方式工作,但帶有定時器中斷。

內核可能實際上是硬件投票硬件,但它不一定是......這都是硬件設計的問題。

+0

@Chris - 什麼是「擱置」。一個進程必須在其中一個州。通過「擱置」你的意思是等待狀態,但這是我問的問題。我自己也不知道,因爲我認爲輪詢並不是一種有效的方式,特別是內核,特別是當內核總是讓他的手充滿這麼多的時候。 – 2009-07-10 03:23:07