该帖已经被评为精华帖
|
|
---|---|
作者 | 正文 |
发表时间:2011-08-16
希望LZ详细介绍下edge和level触发所带来的一些好处,以及编码时需要注意的内容把
|
|
返回顶楼 | |
发表时间:2011-08-17
goldendoc 写道 littlecar 写道 楼主想向你请教一个问题。
前段时间看了下java nio selector的java层面的实现(没有深入到native code看cpp代码,且也只是粗略的看),发现一个问题,对于每一个注册了相关事件的socketchannel/serversocketchannel,selector都会为他们开启一个等待线程sun.nio.windowSelectorImpl$selectThread,这让我很迷惑: selector本名多路复用机制,就是为了在一个通道上完成以前需要多个慢速通道才能完成问题,这种机制的好处也不就是在于避免了 thread per socketchannel而频繁导致thread的阴塞与调度吗? 所以对于openjdk里selectorimp.java,最终每个socketchannel一个thread的模式,能给解释下吗?谢谢。 首先要理解windows下的NIO的Selector其实就是用select实现的,select有MAX_SELECTABLE_FDS限制,而NIO的Selector似乎没有这个限制,为什么,这就是SelectThread的作用,SelectThread中有SubSelector可以用于poll,同时WindowsSelector保证了MAX_SELECTABLE_FDS - 1会拥有一个Daemon的SelectThread线程,去完成select工作,因此不是每个Channel会有一个SelectThread,而是每MAX_SELECTABLE_FDS - 1会有一个SelectThread去做select工作。 的确是,没认真看。当时觉得对每一个socketchannel都生成一个selectthread去poll一下觉得太坑爹了。 顺便赞同下楼上的观点,期待楼主在剖析了源码后,能写一些应用人员nio编程时的注意事项与一些应用技巧。 |
|
返回顶楼 | |