zoukankan      html  css  js  c++  java
  • Selector + 线程池 遇到的问题

      在学习非阻塞 IO 的时候,打算把 Selector + 线程池 合在一起写个 Sample,结果在使用线程池处理 Selector 消息的时候,遇到了诸多问题。不过,经过不懈努力,最终还是解决了那些问题,现把问题总结如下:

    [1] Selector.select() 所在线程不停循环,当循环的上一次在线程池中没有处理完 selectedKeys, 则有可能在下一次也会 select 出来。如:上一次 OP_ACCEPT 在线程池中还没有到达 accept 的执行代码处,则循环的下一次,或者下下一次都会 select出相同的 OP_ACCEPT 消息。因此 每次循环应该等待线程池将所有消息处理完毕,再进行下一次 select() 与线程池消息处理。

    所产生影响:

    1. 由于 [1] 没有解决,因此在 Selector.select() 的时候,在另一线程同时执行到 SelectableChannel.register 非常容易产生死锁。
    2. 由于 [1] 没有解决,因此会产生大量相同的 SelectionKey 以及诸多莫名其妙的问题。

    作者:newcj
    出处:http://newcj.cnblogs.com/
    欢迎转载,但还请尊重劳动果实,保留此段声明并注明原文链接。

  • 相关阅读:
    python爬取北京政府信件信息03
    Python3.7 lxml引入etree
    python爬取北京政府信件信息02
    python爬取北京政府信件信息01
    2020.12.2收获
    2020.12.1收获
    2020.11.30收获
    2020.11.29收获
    2020.11.28收获
    2020.11.27收获
  • 原文地址:https://www.cnblogs.com/newcj/p/2110926.html
Copyright © 2011-2022 走看看