Netty 权威指南:Linux 网络 -I-O- 模型简介,分享我在 Java 开发中走的一些弯路
最常用的 I/O 模型就是阻塞 I/O 模型,缺省情形下,所有文件操作都是阻塞的。我们以套接字接口为例来讲解此模型:在进程空间中调用 recvfrom,其系统调用直到数据包到达且被复制到应用进程的缓冲区中或者发生错误时才返回,在此期间一直会等待,进程在从调用 recvfrom 开始到它返回的整段时间内都是被阻塞的,因此被称为阻塞 I/O 模型,如图 1-1 所示。
(2)非阻塞 I/O 模型:
recvfrom 从应用层到内核的时候,如果该缓冲区没有数据的话,就直接返回一个EWOULDBLOCK
错误,一般都对非阻塞 1/O 模型进行轮询检查这个状态,看内核是不是有数据到来,如图 1-2 所示。
(3) I/O 复用模型:
Linux 提供select/poll
, 进程通过将一 一个或多个 fd 传递给 select
或 poll
系统调用,阻塞在select
操作.上,这样select/poll
可以帮我们侦测多个 fd 是否处于就绪状态。select/poll
是顺序扫描 fd 是否就绪,而且支持的 fd 数量有限,因此它的使用受到了一些制约。Linux 还提供了一个epoll
系统调用,epoll
使用基于事件驱动方式代替顺序扫描,因此性能更高。当有 fd 就绪时,立即回调函数rollback
,如图 1-3 所示。
![](https://upload-images.jianshu.io/upload_images/25222111-fe2a8aae39c8f762.png?imageMogr2/auto-orient/strip%7CimageView2/2/w/1240 Java 开源项目【ali1024.coding.net/public/P7/Java/git】 )
(4)信号驱动 I/O 模型:
首先开启套接口信号驱动 I/O 功能,并通过系统调用sigaction
执行一个信号处理函数(此系统调用立即返回,进程继续工作, 《一线大厂 Java 面试题解析+后端开发学习笔记+最新架构讲解视频+实战项目源码讲义》开源 它是非阻塞的)。当数据准备就绪时,就为该进程生成-一个 SIGIO 信号,通过信号回调通知应用程序调用recvfrom
来读取数据,并通知主循环函数处理数据,如图 1-4 所示。
Kafka 实战笔记
关于这份笔记,为了不影响大家的阅读体验,我只能在文章中展示部分的章节内容和核心截图
Kafka 入门
为什么选择 Kafka
Karka 的安装、管理和配置
Kafka 的集群
第一个 Kafka 程序
afka 的生产者
Kafka 的消费者
深入理解 Kafka
可靠的数据传递
Spring 和 Kalka 的整合
Sprinboot 和 Kafka 的整合
Kafka 实战之削峰填谷
数据管道和流式处理(了解即可)
Kafka 实战之削峰填谷
评论