聊聊 IO

聊聊IO

1、I/O:Input/Output

磁盘 IO:读写磁盘文件

网络 IO:读写 socket 文件

标准输入输出:读写控制台

2、阻塞 IO

应用进程发起 read() 请求之后,调用recvfrom()阻塞,直到数据进入数据接收队列。

数据准备好之后,从内核拷贝到应用进程,应用进程进行数据解析,整个过程应用进程是阻塞的

2次阻塞 一次是TCP连接,一次是读数据的时候

3、非阻塞 IO

应用进程发起 read() 请求,如果数据没有准备好,则立即返回一个返回值,应用进程收到之后,会不断发起 read() 请求,直到内核准备好数据,这个时候应用进程阻塞着,直到数据由内核拷贝到应用进程,应用进程进行数据解析。

可以调用 fcntl 将客户端连接套接字设置为非阻塞

fcntl(client_fd,F_SETFL,0_NONBLOCK);

总结:

BIO:去书店买书,没有我想要的书,我一直在书店等。

NIO:去书店买书,如果没有我想要的书,我走,隔一天再来买,直到有书了。轮询有一点就是浪费 CPU

第二种 NIO:买书的时候,提前给老板打电话,有这本书了,我再来买。多路复用

4、多路复用

IO 多路复用模型中,线程首先发起 select 请求,询问内核数据是否就绪了,等内核把数据准备好了,应用进程再发起 read 请求

Java 中的 NIO ,有一个选择器,也可以被称为多路复用器。通过它,只需要一个线程便可以管理多个客户端连接。

5、select、poll、epoll

select

poll

epoll

相关推荐
一只爱打拳的程序猿12 分钟前
【Spring】更加简单的将对象存入Spring中并使用
java·后端·spring
杨荧13 分钟前
【JAVA毕业设计】基于Vue和SpringBoot的服装商城系统学科竞赛管理系统
java·开发语言·vue.js·spring boot·spring cloud·java-ee·kafka
minDuck15 分钟前
ruoyi-vue集成tianai-captcha验证码
java·前端·vue.js
为将者,自当识天晓地。34 分钟前
c++多线程
java·开发语言
daqinzl42 分钟前
java获取机器ip、mac
java·mac·ip
激流丶1 小时前
【Kafka 实战】如何解决Kafka Topic数量过多带来的性能问题?
java·大数据·kafka·topic
Themberfue1 小时前
Java多线程详解⑤(全程干货!!!)线程安全问题 || 锁 || synchronized
java·开发语言·线程·多线程·synchronized·
让学习成为一种生活方式1 小时前
R包下载太慢安装中止的解决策略-R语言003
java·数据库·r语言
晨曦_子画1 小时前
编程语言之战:AI 之后的 Kotlin 与 Java
android·java·开发语言·人工智能·kotlin
南宫生2 小时前
贪心算法习题其三【力扣】【算法学习day.20】
java·数据结构·学习·算法·leetcode·贪心算法