我想了解select()和非阻塞I/O概念。 但仍然没有得到如果使用select()使用Blocking I/O会发生什么情况,如果使用select()使用非阻塞会怎么样。选择()与非阻塞I/O和选择()与阻塞I/O在套接字
我看过,select()已经是块调用。那么它是如何工作的?
我想了解select()和非阻塞I/O概念。 但仍然没有得到如果使用select()使用Blocking I/O会发生什么情况,如果使用select()使用非阻塞会怎么样。选择()与非阻塞I/O和选择()与阻塞I/O在套接字
我看过,select()已经是块调用。那么它是如何工作的?
会发生什么,如果使用阻塞I/O与
select()
,你会得到IllegalBlockingModeException.
select()
已经阻止呼叫。那么它是如何工作的?
它会阻塞,直到发生正在选择的事件或超时到期(如果有)。
将select()
或poll()
与阻塞或非阻塞套接字一起使用是完全正确的。呼叫select()
本身将被阻止,直到提供给select()
的(其中一个)插座可用于阅读。
至少在UNIX系统中,使用select使用阻塞套接字是完全有效的,并且使用select语句(如完全不支持Exceptions的C语言)也是完全有效的。也许你描述的行为是特定于Java的。 –
不知何故,答案假设Java,这是没有在问题中指定。 – SergeyA
感谢您的解释。但仍有一些疑问。我无法清除阻止和非阻止上下文。 1)如果使用select()使用select或non-blocking使用多个客户端阻塞读/写,有什么区别?
2)如果使用bocking或非阻塞选择或不选择c中的BSD套接字,我会在哪里得到问题 –