网络 I/O
文章平均质量分 98
以 I/O 网络模型理论为基础,通过实战梳理的方式给大家介绍网络中不可思议之处
vnjohn
vnjohn,博主名字的简写,是一名专注于后端领域的程序猿,借用歌名“自己”里的歌词来时刻提醒自己要不断学习,不断思而前行:“第一要保持希望在每天清晨太阳升起,第二切记不要与自身的平凡为敌,第三与自己所处的现在促膝长谈”
展开
-
深入理解网络 I/O:mmap、sendfile、Direct I/O
该篇博文围绕 mmap、sendfile、Direct I/O 进行了技术点的展开讲解,mmap 由 FileChannel#map 映射出一个 MappedByteBuffer(应用空间与内核空间共享一块内存区域,不会触发系统调用)它适用于文件操作 I/O;sendfile 通过一次系统调用以后,它会在内核态完成数据的拷贝过程,无须用户态的参与,它适用于网络传输;Direct I/O 是由用户空间直接与磁盘设备之间交互,无须内核态的参与,它交由用户程序自身来维护缓存以及数据一致性、Dirty 等问题原创 2023-12-22 01:20:19 · 3624 阅读 · 110 评论 -
深入理解网络 I/O:FileOutputStream、BufferFileOutputStream、ByteBuffer
该篇博文主要介绍了 FileOutputStream、BufferFileOutputStream、ByteBuffer 类的特征,简要介绍了如何使用它们进行文件与内存之间的操作,FileOutStream 每次写都会触发系统调用,BufferFileOutStream 以一个批次的方式触发系统调用,而 ByteBuffer 下有很多种实现,HeapByteBuffer 是属于 JVM 堆内的一块内存区域,DirectByteBuffer 是属于 Java 进程堆内也就是 JVM 堆外的一块内存区域原创 2023-12-21 00:40:43 · 1492 阅读 · 22 评论 -
深入理解网络 I/O:单 Group 混杂模式|多 Group 主从模式
该篇博文主要介绍多路复用模型 Epoll 下「单 Group 混杂模式与多 Group 主从模式」之间的区别,先是说明了在单 Group 混杂模式中由于 Event 未划分清晰造成资源倾斜问题,后者介绍了多 Group 主从模式,解决资源倾斜存在的问题,结合 BossGroup + WorkerGroup + 链接阻塞队列的方式来完成,Netty Reactor 它的工作架构图类比于此模式,只是它在此基础上做了很多的优化工作,也就是为什么大多数中间价会使用 Netty 原因,最重要的就是为了充分发挥我们硬件原创 2023-12-16 21:51:07 · 3222 阅读 · 122 评论 -
深入理解网络 I/O:单 Selector 多线程|单线程模型
该篇博文主要介绍多路复用模型 Epoll 下单 Selector 多线程与单线程之间的区别,先是说明了在单 Selector 非线性模型下-多线程会造成读、写事件重复触发的问题, 通过图解和 strace 追踪日志的方式说明了它的缺点,解决事件重复触发问题通过 SelectionKey#cannel 来进行解决,莫须有这种方式不可取会造成假死线程|资源停滞不释放问题,后者介绍了单个 Selector 单 Group 解决这种假死资源的存在问题,结合 Selector#wakeup + 链接阻塞队列的方式来完原创 2023-12-16 02:12:26 · 2406 阅读 · 36 评论 -
深入理解网络 I/O 多路复用:Epoll
该篇博文主要介绍的就是比较重要比较核心的多路复用模型 Epoll,先简略说明 Epoll 重要的三大函数:epoll_create、epoll_ctl、epoll_wait,在其中说到了 Epoll 事件接口:边沿触发(ET:edge-triggered)、水平触发(LT:level-triggered),提及到了 Epoll 内核中关键的源码部分,使用三大函数巧妙结合起来实现 epoll 高效的多路复用,在底层采用红黑树结构存储所有的 socket fd 信息,采用链表结构存储所有有事件状态的 socke原创 2023-12-13 11:05:29 · 4193 阅读 · 96 评论 -
深入理解网络中断:原理与应用
该篇博文作为引入 Epoll 多路复用函数前的钩子,先简略得了解中断机制是怎样的「内核主动变为硬件主动」在其中说到了中断的种类:中断、异常,两者的本质都是让 CPU 收到一个中断号,再到中断描述符表找出具体的执行处理的程序入口即可响应事件要处理的事情,再者就是,给 CPU 一个中断号有三种方式:1、通过中断控制器给 CPU INTR 引脚发送信号,也就是硬件中断的方式,2、CPU 执行某条指令时发生了异常,自身会触发一个中断号,3、执行 INT n 指令,会直接给 CPU 一个中断号 n,这就是在软件中断场原创 2023-12-11 06:56:21 · 4674 阅读 · 96 评论 -
深入理解网络 I/O 多路复用:SELECT、POLL
该篇博文主要介绍的是 I/O 模型中的多路复用:SELECT、POLL,简要分析了 I/O 多路复用的模型,通过图解分析的方式告知多路复用所带来的好处「介绍了 SELECT、POLL 函数以及它们的区别」,通过实践代码的方式来分析 I/O 多路复用在系统调用中所涉及到的内核流程代码,同时也当代码编写不当时会给 TCP 挥手带来的问题,最后介绍了上篇 NIO 博文与 I/O 多路复用之间的区别,希望能够得到你的支持原创 2023-12-08 01:57:57 · 5070 阅读 · 68 评论 -
深入理解网络非阻塞 I/O:NIO
该篇博文主要介绍的是 I/O 模型中的非阻塞 I/O -> NIO,简要分析了 NIO 非阻塞式 I/O 简要的模型,通过图解分析的方式告知它与 BIO 之间的区别,通过实践代码的方式来分析非阻塞 I/O 在系统调用中所涉及到的流程,同时也介绍了 C10K 问题给非阻塞式 I/O 带来的不利之处,最后介绍了上篇 BIO 博文与 NIO 之间的相关的区别以及 NIO 为什么速度会慢的原因,希望能够得到你的支持原创 2023-12-03 15:05:47 · 9551 阅读 · 132 评论 -
浅谈 TCP 握手/数据传输/挥手过程以及 tcpdump 抓包工具使用
该文章浅谈了 TCP 三次握手、数据传输、四次挥手的交互过程,通过 tcpdump 抓包工具对这三个流程进行了信息的输出以及介绍,文末整理了一些操作 TCP 常用的命令以及一些常见的问题,当然,对于整个 TCP 可靠性协议,这些只是皮毛一角了,后续会细究出更多内容进行输出原创 2023-03-05 02:04:04 · 2832 阅读 · 3 评论 -
深入理解网络阻塞 I/O:BIO
该篇博文主要介绍的是 I/O 模型中的阻塞 I/O -> BIO,简要分析了 BIO 流程图及相关系统函数调用,通过实践代码的方式来分析阻塞 I/O 在系统调用中所涉及到的流程,最后,介绍了相关联的系统函数:strace、socket、bind、listen、accept,希望能够得到你的支持,感谢三连原创 2023-11-30 01:13:16 · 8119 阅读 · 104 评论