V2EX = way to explore
V2EX 是一个关于分享和探索的地方
现在注册
已注册用户请  登录
V2EX 提问指南
pythonee
V2EX  ›  问与答

nio的SocketChannel.configureBlocking(false)和aio有什么区别吗?

  •  
  •   pythonee · 2013-07-26 20:55:01 +08:00 · 7194 次点击
    这是一个创建于 4123 天前的主题,其中的信息可能已经有所发展或是发生改变。
    又来IO问题了,这个问题我想只有v2ex的大牛们能帮我了

    我想问的是SocketChannel.configureBlocking(false)之后,对IO操作有什么影响,为什么nio有时候叫异步阻塞有时候又叫同步非阻塞,和aio有什么区别?

    另外就是为什么configureBlocking(false)只有在nio时候才用,如果这能提高性能,为什么BIO不也用呢?而且这句话对nio的意义特别大呢?

    难道我真的要去读源码吗?
    6 条回复    1970-01-01 08:00:00 +08:00
    timonwong
        1
    timonwong  
       2013-07-26 21:10:45 +08:00
    SocketChannel.configureBlocking(false)
    在该socket上的读写都不阻塞,也就是读写操作立即返回,无论有没有数据。这个设置对于POSIX中的O_NONBLOCK标志。

    AIO(Asynchronous IO)概念上比NIO更一步,它一般包含了Non-blocking的意思,另外还能让操作并发(concurrent)的执行。
    pythonee
        2
    pythonee  
    OP
       2013-07-26 21:29:18 +08:00
    @timonwong 为什么这个操作对nio特别有用,但是BIO有没有这个设置呢
    timonwong
        3
    timonwong  
       2013-07-26 21:35:02 +08:00
    @pythonee
    BIO是Blocking IO。。。
    NIO是Non-blocking IO。。。
    先决条件啊。。
    pythonee
        4
    pythonee  
    OP
       2013-07-27 10:01:01 +08:00
    @timonwong 但是nio你不设置这个标志的,默认是blocking的,我是想说为啥要分成两个,不设置不就好了,难道说是为了兼容老代码?
    wang2191195
        5
    wang2191195  
       2013-07-27 10:09:56 +08:00 via iPhone
    @pythonee 不懂java 但是non-blocking 和 AsyncIO是有区别的 non-blocking 意指不阻塞 不管有没有我否马上返回
    Async意指异步 即利用内核线程(阻塞?)完成IO操作 用户代码继续执行 并等待完成事件
    timonwong
        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属性。
    关于   ·   帮助文档   ·   博客   ·   API   ·   FAQ   ·   实用小工具   ·   2792 人在线   最高记录 6679   ·     Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 · 24ms · UTC 02:00 · PVG 10:00 · LAX 18:00 · JFK 21:00
    Developed with CodeLauncher
    ♥ Do have faith in what you're doing.