0

現在我對併發和並行性做了大量的研究。你能告訴我,如果我理解正確的話(在操作系統級別):我的(初學者)對阻塞和非阻塞io的理解是否正確?

阻塞IO:

當我明確等待連接(即紅寶石:)

conn = socket.accept 

所以我的線程被阻塞直到我找到socket的東西,對吧?

(據我所知,我的一些循環池插座接受數據,對吧?)

非阻塞:

我有線索是從時間要求時間所有註冊的FD(filedescriptors )如果他們有我需要的東西。但也有'不打電話給我們,我們會打電話給你'的規則,但它是如何在ios級別上工作的(在事件機器或節點上它是通過回調(?)完成的)

PS。我歡迎讀數和演示,如: http://www.paperplanes.de/2011/4/25/eventmachine-how-does-it-work.html http://www.kegel.com/c10k.html

回答

2

阻塞IO:

當我明確等待連接(即紅寶石:)

康恩= socket.accept

所以我的線程被阻塞,直到我得到的東西插座,對不對?

沒錯。

(據我所知,我在一些循環池插座接受數據,對吧?)

錯誤。你被封鎖了。期。當相關事件發生時,操作系統會喚醒你。

非阻塞:

我有線索是從時間要求時間所有註冊的FD(filedescriptors),如果他們有什麼,我需要。但也有「不要給​​我們打電話,我們會打電話給你」的規則,但它是如何工作的IOS級別(像EventMachine的或者節點是由回調(做什麼?)庫)

你有什麼公正描述包括回調是'異步'I/O。

非阻塞I/O只是意味着呼叫不會阻塞,例如,如果你打電話給read(),那裏已經沒有數據了,什麼都不會發生。什麼時候打電話取決於你,但它有select()/poll()/epoll()的協助,它會阻塞,直到套接字上發生各種事件。