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()的协助,它会阻塞,直到套接字上发生各种事件。