Java小工匠聊网络编程--JavaNIO-基础概念
同步与异步主要是从消息通知机制角度来说的。同步没有通知,异步有知。
阻塞与非阻塞主要是程序等待消息通知时的状态角度来说的。阻塞调用是指调用结果返回之前,当前线程会被挂起,一直处于等待消息通知,不能够执行其他业务。
(1)同步阻塞 下载一个文件,下载人不做任何事情,看着进度条下载完成。 (2)同步非阻塞 下载一个文件,下载人不做任何事情,等待下载完成的通知。 (3)异步阻塞 下载一个文件,下载人做其他事情,隔断时间看着进度是否下载完成。 (4)异步非阻塞 下载一个文件,下载人做其他事情,等待下载完成的通知。
网络IO的本质是socket的读取,socket在linux系统被抽象为流,IO可以理解为对流的操作。例如当一个read操作发生时,它会经历两个阶段: 第一阶段:等待数据准备。 第二阶段:将数据从内核拷贝到进程中。 对于socket流而言, 第一步:通常涉及等待网络上的数据分组到达,然后被复制到内核的某个缓冲区。 第二步:把数据从内核缓冲区复制到应用进程缓冲区。
(1)同步模型(synchronous IO)
阻塞IO(bloking IO)
非阻塞IO(non-blocking IO)
多路复用IO(multiplexing IO)
信号驱动式IO(signal-driven IO)
(2)异步IO(asynchronous IO)
image.png
image.png
image.png
image.png
image.png
5个IO模型
扫码关注腾讯云开发者
领取腾讯云代金券
Copyright © 2013 - 2025 Tencent Cloud. All Rights Reserved. 腾讯云 版权所有
深圳市腾讯计算机系统有限公司 ICP备案/许可证号:粤B2-20090059 深公网安备号 44030502008569
腾讯云计算(北京)有限责任公司 京ICP证150476号 | 京ICP备11018762号 | 京公网安备号11010802020287
Copyright © 2013 - 2025 Tencent Cloud.
All Rights Reserved. 腾讯云 版权所有