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、

网络编程.iocp的更多相关文章

  1. C#网络编程技术FastSocket实战项目演练

    一.FastSocket课程介绍 .NET框架虽然微软提供了socket通信的类库,但是还有很多事情要自己处理,比如TCP协议需要处理分包.组包.粘包.维护连接列表等,UDP协议需要处理丢包.乱序,而 ...

  2. IOCP模型与网络编程

    IOCP模型与网络编程 一.前言:        在老师分配任务(“尝试利用IOCP模型写出服务端和客户端的代码”)给我时,脑子一片空白,并不知道什么是IOCP模型,会不会是像软件设计模式里面的工厂模 ...

  3. c++ 网络编程(八) LINUX-epoll/windows-IOCP下 socket opoll函数用法 优于select方法的epoll 以及windows下IOCP 解决多进程服务端创建进程资源浪费问题

    原文作者:aircraft 原文链接:https://www.cnblogs.com/DOMLX/p/9622548.html 锲子:关于并发服务器中的I/O复用实现方式,前面在网络编程系列四还是五来 ...

  4. 浅谈C#网络编程(一)

    阅读目录: 基础 Socket编程 多线程并发 阻塞式同步IO 基础 在现今软件开发中,网络编程是非常重要的一部分,本文简要介绍下网络编程的概念和实践. Socket是一种网络编程接口,它是对传输层T ...

  5. C#网络编程系列(两)它Socket同步TCPserver

    声明原文 笔者:竹zz  本文地址http://blog.csdn.net/zhujunxxxxx/article/details/44258719 转载请注明出处 文章系列文件夹 C#网络编程系列文 ...

  6. winsock编程IOCP模型实现代码

    winsock编程IOCP模型实现代码 话不多说,上代码.借鉴<windows核心编程>部分源码和CSDN小猪部分代码. stdafx.h依赖头文件: #include <iostr ...

  7. Netty与网络编程

    Netty什么? Netty项目是一个提供异步事件驱动网络应用框架和快速开发可维护的高性能高扩展性服务端和客户端协议工具集的成果.换句话说,Netty是一个NIO客户端服务端框架,它使得快速而简单的开 ...

  8. 网络编程第六讲Select模型

    网络模型第六讲Select模型 一丶Select模型是什么 以前我们讲过一个迭代模型.就是只服务一个客户端连接.但是实际网络编程中.复杂的很多. 比如一个 C/S架构程序 (客户端/服务端) 客户端很 ...

  9. 网络编程中TCP基础巩固以及Linux打开的文件过多文件句柄的总结

    1.TCP连接(短链接和长连接) 什么是TCP连接?TCP(Transmission Control Protocol 传输控制协议)是一种面向连接的.可靠的.基于字节流的传输层通信协议. 当网络通信 ...

随机推荐

  1. vue项目中利用popstate处理页面返回操作

    需求背景:项目中需要做一个返回确认,避免用户误触返回键而退出当前页面. 原理:利用history和浏览器刷新popstate状态 实现: 1.在mounted() 阶段判断并添加popstate事件监 ...

  2. nginx的反向代理和配置

    最近有打算研读nginx源代码,看到网上介绍nginx可以作为一个反向代理服务器完成负载均衡.所以搜罗了一些关于反向代理服务器的内容,整理综合. 一  概述 反向代理(Reverse Proxy)方式 ...

  3. Windows 2012 R2 DataCenter服务器 重启之后,其他加域电脑无法访问域账户

    需在域控服务器重启,服务Kerberos Key

  4. Apache服务器配置https

    https://startssl.com这个网站可以给我们免费提供可信任的https证书,这里简单介绍一下配置的过程. 首先服务器需要安装openssl和apache的mod_ssl.so模块,并且需 ...

  5. POJ-1904-King‘s Quest

    链接: https://vjudge.net/problem/POJ-1904 题意: Once upon a time there lived a king and he had N sons. A ...

  6. 【GDKOI2013选拔】大LCP

    题目 LCP就是传说中的最长公共前缀,至于为什么要加上一个大字,那是因为-你会知道的. 首先,求LCP就要有字符串.既然那么需要它们,那就给出n个字符串好了. 于是你需要回答询问大LCP,询问给出一个 ...

  7. 【leetcode】1221. Split a String in Balanced Strings

    题目如下: Balanced strings are those who have equal quantity of 'L' and 'R' characters. Given a balanced ...

  8. (一)SQL -- 基础知识

    SQL是一个标准的数据库语言,是面向集合的描述性非过程化语言. 优点:功能强.效率高.简单易学易维护. 缺点:非过程化语言,大多数语言都是独立执行,与上下文无关,而大多数 应用都是一个完整的过程,显然 ...

  9. 京东面试题:Java中 ++i 的操作是线程安全的么?为什么?如何使其线程安全呢?

    你真的了解volatile关键字吗?http://blog.csdn.net/FansUnion/article/details/79495080 面试题:为什么最后两行没有运行?http://blo ...

  10. [LeetCode]-DataBase-Duplicate Emails

    Write a SQL query to find all duplicate emails in a table named Person. +----+---------+ | Id | Emai ...