网站首页 > 技术文章 正文
为什么网络 I/O 会被阻塞?I/O 到底是什么?
背景
对语言设计人员来说,创建好的输入/输出系统是一项特别困难的任务,本文就IO进行论述,如果对你有所学习,那就留下一个关注吧。
I/O 到底是什么
I/O,就是input(输入)/output(输出)。
总结下:I/O 就是指内存与设备之间的数据交互(数据拷贝)。Java.io是大多数面向数据流的输入/输出类的主要软件包。
Java IO 流的整体架构图:
I/O输入和输出
Java 库的IO 类分割为输入与输出两个部分。
输入:用于读取单个字节或字节数组。
输出:用于写入单个字节或者字节数组。
InputStream 的类型
InputStream的功能是标记从不同来源生成输入的类。这些起源地包括(每个都有一个相关的 InputStream 子类):
(1) 字节数组
(2) String 对象
(3) 文件
(4) “管道”
OutputStream 的类型
OutputStream是所有输出字节流的父类,它是一个抽象类。一个字节数组。一个文件;或者一个“管道”。
阻塞含义
访问IO的线程是否会阻塞(或处于等待),线程访问资源,该资源是否准备就绪的一种处理方式。
socket 通信内幕流程
1、创建 socket客户端
首先服务端需要先创建一个 socket。
2、Bind绑定
需要指定一个地址和端口来与这个 socket 绑定一下。
3、listen
调用 listen 方法,让 socket 进入被动监听状态,这样的 socket 才监听到客户端的连接请求。
4、accept
从已完成连接队列中拿到连接进行处理,这个动作就由 accpet 来执行
5、connect
调用connect需要指定远程的address和port进行建连。
这里的两个阻塞点:
- connect:需要阻塞等待三次握手的完成。
- accept:需要等待可用的已完成的连接,如果连接队列为空,则被阻塞。
6、read、write
连接建立成功之后,就能开始发送和接收消息了。
read 为读数据,read 读不到数据阻塞等待。
write 为写数据,这个写入也可能会被阻塞。
为什么网络 I/O 会被阻塞?
因为及到的 accept、connect、read、write 这几个操作的时候都可能会发生阻塞。
阻塞会占用当前正在运行的线程,由于阻塞的原因,以前的解决的方案就是建立多个线程, 所以后来就搞个非阻塞套接字, I/O多路复用、信号驱动I/O、异步I/O等等。
Java 共支持5种网络编程模型/IO 模式
1、阻塞I/O
2、非阻塞I/O
3、I/O多路复用
4、信号驱动I/O
5、异步I/O
猜你喜欢
- 2024-10-25 什么是喉梗阻 反流性食管炎嗓子疼怎么办
- 2024-10-25 阻塞列队详解!让你轻松理解阻塞列队
- 2024-10-25 【健康科普】认识阻塞性睡眠呼吸暂停低通气综合征
- 2024-10-25 气象科普|阻塞高压为何方神圣?后期它将给我国制造多轮冷空气
- 2024-10-25 非阻塞算法CAS 非阻塞函数
- 2024-10-25 如何用Java设计阻塞队列,再说说ArrayBlocking和LinkedBlocking
- 2024-10-25 使用 Python Socket 实现非阻塞 I/O入门讲解
- 2024-10-25 梗阻性无精子症:多种选择,何为最佳?
- 2024-10-25 焦耳小偷 一个神奇的电路 焦耳小偷电路需要注意的地方
- 2024-10-25 ESP8266非阻塞事件处理 我们来看一下这个非阻塞延时的代码
你 发表评论:
欢迎- 最近发表
-
- 吴谨言专访大反转!痛批耍大牌后竟翻红,六公主七连发力显真诚
- 港股2月28日物业股涨幅榜:CHINAOVSPPT涨1.72%位居首位
- 港股2月28日物业股午盘:CHINAOVSPPT涨1.72%位居首位
- 港股3月2日物业股涨幅榜:CHINAOVSPPT涨1.03%位居首位
- 港股3月2日物业股午盘:CHINAOVSPPT涨1.03%
- 天赋与心痛的背后:邓鸣贺成长悲剧引发的深刻反思
- 冯小刚女儿徐朵追星范丞丞 同框合照曝光惹人羡,回应网友尽显亲民
- “资本大佬”王冉:51岁娶小17岁童瑶,并承诺余生为娇妻保驾护航
- 港股3月2日物业股午盘:CHINAOVSPPT涨1.03%位居首位
- 「IT之家开箱」vivo S15 图赏:双镜云窗,盛夏风光
- 标签列表
-
- oraclesql优化 (66)
- 类的加载机制 (75)
- feignclient (62)
- 一致性hash算法 (71)
- dockfile (66)
- 锁机制 (57)
- javaresponse (60)
- 查看hive版本 (59)
- phpworkerman (57)
- spark算子 (58)
- vue双向绑定的原理 (68)
- springbootget请求 (58)
- docker网络三种模式 (67)
- spring控制反转 (71)
- data:image/jpeg (69)
- base64 (69)
- java分页 (64)
- kibanadocker (60)
- qabstracttablemodel (62)
- java生成pdf文件 (69)
- deletelater (62)
- com.aspose.words (58)
- android.mk (62)
- qopengl (73)
- epoch_millis (61)
本文暂时没有评论,来添加一个吧(●'◡'●)