大端字节序(Big Endian)是一种计算机存储多字节数据的方式,其中数据的高位字节存储在低地址内存中,而低位字节存储在高地址内存中。
在网络传输中,通常使用大端字节序,也称为网络字节序。
这是TCP/IP协议的规定,多字节数据在网络上传输时使用大端字节序。
因此,如果本地系统使用的是小端字节序,就需要在传输之前将其转换为大端字节序
AIO(Asynchronous I/O) NIO2.0
AsynchronousServerSocketChannel
AsynchronousSocketChannel
CompletionHandler
netty放弃AIO的理由
Not faster than NIO (epoll) on unix systems (which is true),
NIO 和 AIO 在 unix 系统上使用的都是 epoll 模式,本质都是一样的
Netty舍弃AIO的支持,
https://github.com/netty/netty/issues/2515
Netty移除AIO的一个主要原因是在性能上AIO并没有比NIO高。
Linux虽然有一套原生的AIO实现,但Java AIO并没有采用,而是用epoll来模拟实现
Java AIO在某些情况下可能会遇到“死亡回调”的问题,
即在回调方法中再次调用回调方法,
这会导致无限递归,最终导致程序崩溃或性能下降。
Java AIO的实现依赖于操作系统,Windows基于IOCP实现了AIO,而Linux目前只有基于epoll模拟实现的AIO
Java AIO基于通道(Channel)和缓冲区(Buffer),
通道负责向操作系统发起IO请求,缓冲区负责存储IO操作的数据
Java AIO在某些场景下表现优异,但也存在一些局限性。
例如,Java AIO在多核CPU环境下处理高并发请求时,可能会引发严重的锁竞争现象,导致性能无法充分发挥,
由于其复杂性和局限性,Netty等流行的网络框架选择移除对Java AIO的支持,转而使用NIO作为其I/O模型
Java AIO与NIO的主要区别在于通知机制,
在java NIO中,当I/O操作准备好时,会通知应用程序;
在Java AIO中,当I/O操作完成时,会通知应用程序;
这种差异使得Java AIO在处理I/O完成后的后续操作时更加直接和高效
第一页
上一页
下一页
最后一页