1
timonwong 2013-07-26 21:10:45 +08:00
SocketChannel.configureBlocking(false)
在该socket上的读写都不阻塞,也就是读写操作立即返回,无论有没有数据。这个设置对于POSIX中的O_NONBLOCK标志。 AIO(Asynchronous IO)概念上比NIO更一步,它一般包含了Non-blocking的意思,另外还能让操作并发(concurrent)的执行。 |
4
pythonee OP @timonwong 但是nio你不设置这个标志的,默认是blocking的,我是想说为啥要分成两个,不设置不就好了,难道说是为了兼容老代码?
|
5
wang2191195 2013-07-27 10:09:56 +08:00 via iPhone
@pythonee 不懂java 但是non-blocking 和 AsyncIO是有区别的 non-blocking 意指不阻塞 不管有没有我否马上返回
Async意指异步 即利用内核线程(阻塞?)完成IO操作 用户代码继续执行 并等待完成事件 |
6
timonwong 2013-07-27 10:20:15 +08:00
@pythonee
"但是nio你不设置这个标志的,默认是blocking的" 1. socket默认就是blocking的,就该是blocking的(你可以想想文件操作的read(), write()默认不阻塞的情况) 2. configureBlocking(false); 之后,就成为了 non blocking *socket* io, 注意有socket. 3. SocketChannel是比较底层的东西,跟socket编程基本都对应,如果不对应,那不是多加一个概念。。。 如果按照你说的,有两种方法: ___1:继承出几种类,为了那仅仅一行代码,贯彻封+装原则。 ___2: 传给其它操作,implicitly 修(po)改(huai) socket属性。 |