nio
筏镜
这个作者很懒,什么都没留下…
展开
-
NIO中的内存映射和零拷贝 及Netty中的零拷贝
传统IO这传统io读取数据并发送的流程图。这传统io读取数据并发送的过程中发生的上下文切换过程,与拷贝的对应过程。1、DMA模块从磁盘中读取文件内容,内核通过sys_read()(或等价的方法)从文件读取数据,并将其存储在内核空间的缓冲区内,完成了第1次复制。(系统调用read导致了从用户空间到内核空间的上下文切换。)2、数据从内核空间缓冲区复制到用户空间缓冲区,read()方法返回导致上下文从内核态切换到用户态。此时,需要的数据已存放在指定的用户空间缓冲区内(参数tmp_buf)。3、wri原创 2020-06-26 02:25:04 · 795 阅读 · 1 评论 -
Netty入站出站介绍及借助使用到责任链简单实现实现网络编程中拆包和粘包
Netty入站出站事件入站事件:通常指I/O线程生成入站数据。(通俗理解:从socket底层往上冒的事件都是入站)比如EventLoop收到selector的OP_READ事件,入站处理器调用socketChannel.read(ByteBuffer)接收到数据后,这将通道ChannelPipeline中包含的下一个channelRead方法被调用。出站事件:经常是指I/O线程执行实际的输出操作。(通俗理解:主动往socket底层操作的事件都是出站)比如bind方法的用意是请求server soc原创 2020-06-14 18:31:28 · 370 阅读 · 0 评论 -
NIO的介绍(与BIO的区别及使用模型)
阻塞与同步1、阻塞和非阻塞阻塞和非阻塞是进程在访问数据的时候,数据是否准备就绪的一种处理方式,当数据没有准备的时候一直等待,直到有数据返回,否則一直等待在那里。非阻塞:当我们的进程访问我们的数据缓冲区的时候,如果数据没有准备好则直接返回,不会等待。如果数据已经准备好,也直接返回。如果用一个烧水例子解释这个问题:阻塞:就相当于水壶放在放到火上,立等水开才能知道水是否开了。非堵塞:就相当于把水壶放在火上,随时去看,都知道水开还是没开而不是要等到水开了,才能告知结论。如果采用这种方案就是,可以看电视时原创 2020-05-24 22:39:46 · 492 阅读 · 0 评论