netty

  1. I/O 模型
  • 阻塞I/O模型(BIO)
  • 非阻塞I/O模型
  • I/O复用模型(select/poll;epoll)
    • select/poll: 顺序扫描fd是否就绪
    • epoll: 事件驱动,mmap同一块内存来减少内存复制
  • 信号驱动I/O模型(何时可以开始I/O操作)
    1. 数据准备时间内进程继续执行,准备好了执行信号处理程序
    2. 执行recvfrom,数据复制(内核空间到用户空间)时阻塞。
  • 异步I/O (何时I/O完成)
  1. BIO

    1. 第一种方案 :一个客户端连接一个线程处理
    2. 第二种方案: 客户端连接又线程池来处理
  2. FileChannel 示例

下面是一个使用FileChannel读取数据到Buffer中的示例:

Java代码 
RandomAccessFile aFile = new RandomAccessFile("data/nio-data.txt", "rw");  
FileChannel inChannel = aFile.getChannel();  
  
ByteBuffer buf = ByteBuffer.allocate(48);  
  
int bytesRead = inChannel.read(buf);  
while (bytesRead != -1) {  
  
System.out.println("Read " + bytesRead);  
buf.flip();  
  
while(buf.hasRemaining()){  
System.out.print((char) buf.get());  
}  
  
buf.clear();  
bytesRead = inChannel.read(buf);  
}  
aFile.close();  

注意 buf.flip() 的调用,首先读取数据到Buffer,然后反转Buffer,接着再从Buffer中读取数据。下一节会深入讲解Buffer的更多细节。

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容