写点什么

Netty 权威指南:Linux 网络 -I-O- 模型简介,分享我在 Java 开发中走的一些弯路

  • 2022 年 4 月 22 日
  • 本文字数:882 字

    阅读完需:约 3 分钟

最常用的 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 传递给 selectpoll 系统调用,阻塞在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 实战之削峰填谷



用户头像

还未添加个人签名 2022.04.13 加入

还未添加个人简介

评论

发布
暂无评论
Netty权威指南:Linux网络-I-O-模型简介,分享我在Java开发中走的一些弯路_Java_爱好编程进阶_InfoQ写作社区