• 网络编程.iocp


    1、(20191212)查到的一些资料:java从 JDK7开始 引入AOI(即 NIO2)。然后 实现 IOCP使用的是 AsynchronousChannelGroup、AsynchronousServerSocketChannel相关的内容。

      ZC:据说 AsynchronousChannelGroup 在Windows下使用的是 IOCP,在 Linux下使用的还是 NIO那一套 只是在NIO上又套了一层 假装AIO。

      ZC:查到 Netty至今使用的 还是 NIO(具体原因,几点我记住的是:A、异步IO和Netty原本的架构不配套 改成AIO那一套的话 会4不像;B、不注重Windows上的使用;... ...)

     1.1、测试了一下,貌似 JDK 8u202 上的也是阉割版的IOCP?

      PS:<<Windows网络与通信程序设计>>上C++版的IOCP 可以投递多个accept操作,然后 一个socket可以投递多个接收操作(查官网 WSARecv 做重叠IO操作 貌似就可以对同一个socket投递多个接收缓冲)

      用 java的AsynchronousChannelGroup 简单测试了一下,accept操作 只能投递一个,接收操作 也只能投递一个...

       具体报错 如下:

        (1)投递 2次 accpt操作,会报错:java.nio.channels.AcceptPendingException

          在 "AcceptPendingException (Java Platform SE 8 ).html(https://docs.oracle.com/javase/8/docs/api/index.html)"中搜索 "AcceptPendingException",会看到 这样的讲解:“Unchecked exception thrown when an attempt is made to initiate an accept operation on a channel and a previous accept operation has not completed.”

        (2)投递 2次 接收(read)操作,会报错:java.nio.channels.ReadPendingException

          在 "ReadPendingException (Java Platform SE 8 ).html(https://docs.oracle.com/javase/8/docs/api/java/nio/channels/ReadPendingException.html?is-external=true)"中可以看待这样的讲解:“Unchecked exception thrown when an attempt is made to read from an asynchronous socket channel and a previous read has not completed.”

       这样可以看出,8u202版的 网络异步IO,只支持1次 投递操作... 后面的收费版 JDK有修改吗?

       ZC:只能投递 1次,这样的AIO 与NIO相比 性能能比NIO快?能快多少?

       ZC:但是,这样避免了一个坏处:同一个socket上投递多个接收缓冲区的话,由于缓冲区使用顺序的不同 可能会造成接收到的数据是乱序的。(我查MS的WSARecv,上面说 投递缓冲区的顺序就是驱动中使用[填充]缓冲区的顺序,建议不要多线程同时投递同一个socket的多个接收缓冲区  导致不可预知的缓冲区顺序 [个人理解是 ∵线程调度 顺序无法预测/确定],要在一个线程中投递同一个socket的多个接收缓冲区。然后对投递的缓冲区进行编号 就可以得到正确的接收顺序。[没有测试是否使用线程同步 就可以在多线程中投递同一个socket的多个接收操作了...?]) 1个socket上只能投递一个相同类型的异步操作的话 就不会有这个问题了...

    2、

    3、

    4、

    5、

  • 相关阅读:
    Java内存模型之重排序
    JAVA虚拟机:对象的创建过程
    单链表——基本操作
    new File()
    JVM回收方法区内存
    强软弱虚---强引用、软引用、弱引用、虚引用
    线性表(二)——链式存储
    JVM中判断对象是否存活的方法
    GC算法 垃圾收集器
    线性表(一)——顺序结构
  • 原文地址:https://www.cnblogs.com/javaskill/p/12030117.html
Copyright © 2020-2023  润新知