JavaIO基础01-基础感念

1、同步与异步

同步与异步主要是从消息通知机制角度来说的。同步没有通知,异步有知。

2、阻塞与非阻塞

阻塞与非阻塞主要是程序等待消息通知时的状态角度来说的。阻塞调用是指调用结果返回之前,当前线程会被挂起,一直处于等待消息通知,不能够执行其他业务。

3、同异步与阻非塞

(1)同步阻塞
下载一个文件,下载人不做任何事情,看着进度条下载完成。
(2)同步非阻塞
下载一个文件,下载人不做任何事情,等待下载完成的通知。
(3)异步阻塞
下载一个文件,下载人做其他事情,隔断时间看着进度是否下载完成。
(4)异步非阻塞
下载一个文件,下载人做其他事情,等待下载完成的通知。

4、LINUX IO 模型

4.1、LINUX IO 操作步骤

网络IO的本质是socket的读取,socket在linux系统被抽象为流,IO可以理解为对流的操作。例如当一个read操作发生时,它会经历两个阶段:
第一阶段:等待数据准备。
第二阶段:将数据从内核拷贝到进程中。
对于socket流而言,
第一步:通常涉及等待网络上的数据分组到达,然后被复制到内核的某个缓冲区。
第二步:把数据从内核缓冲区复制到应用进程缓冲区。

4.2、LINUX IO 模型分类

(1)同步模型(synchronous IO)

    阻塞IO(bloking IO)
    非阻塞IO(non-blocking IO)
    多路复用IO(multiplexing IO)
    信号驱动式IO(signal-driven IO) 

(2)异步IO(asynchronous IO)

4.3、Linux IO模型矩阵

image.png

4.4、Linux 阻塞IO

image.png

4.5、Linux 同步非阻塞IO

image.png

4.6、Linux 同步非阻塞IO多路复用

image.png

4.7、Linux 异步信号驱动

image.png

4.8、Linux 总结

5个IO模型

你可能感兴趣的:(JavaIO基础01-基础感念)