在Java或C#或一些其他语言中,存在非阻塞IO设施,例如,用于套接字。
因此,我可以将回调函数提供给非阻塞IO,一旦非阻塞IO接收到任何内容,它就会调用我的回调函数。
我想知道它们是如何实现的。如果我在后台创建非阻塞IO,Java或C#会为它们创建后台线程吗?或者底层的操作系统对它们有本机支持?
发布于 2012-05-11 00:51:26
在Windows上,底层操作系统支持非阻塞I/O,微软的CLR利用了这一点。其他CLR实现(mono)可能也是如此,但我不确定。在Microsoft CLR上执行异步I/O时,挂起的异步I/O操作与等待这些I/O操作完成的线程(或至少托管线程)之间不存在一对一的关联。
有关Win32层的详细信息,请参阅http://msdn.microsoft.com/en-us/library/windows/desktop/aa365683(v=vs.85).aspx。这里还有关于I/O完成端口的信息:http://msdn.microsoft.com/en-us/library/aa365198(VS.85).aspx
我的理解是:
以上几点注意事项:
对于Java,我确信这取决于JVM实现和特定的操作系统。我对它的了解还不够深入,无法做出更多的推测。
编辑:历史更新,更多详细信息here
https://stackoverflow.com/questions/10538708
复制相似问题