直接上图

Linux I/O彻底解惑

0-1.用户Call App
0-2.Cpu初始化App
1-1.用户线程Call内核线程
1-2.用户线程Wait for 内核线程返回
----------Context Switching No1-----------
2-1.内核线程Call DMA
2-2.内核线程Wait for data
----------Context Switching No2-----------
3-1.DMA从Sokcet中获取数据
3-2.DMA拷贝数据到内核空间
----------Context Switching No3-----------
4.用户线程拷贝数据到用户空间
----------Context Switching No4-----------
5.用户线程Blcoking结束,进入后续执行。
以上就是Blocking IO的生命周期,
    Blocking阶段在①DMA I/O数据往内核空间-->准备②CPU I/O数据往用户空间-->拷贝
 
 辨析 阻塞与非阻塞:
通过下图可以轻易得知:
 1. Blocking I/O------->阶段①Blocking,阶段②Blocking
 2. Non Blocking I/O-->阶段①Non Blocking,阶段②Blocking
 3. I/O Multiplexing--->阶段①Blocking,阶段②Blocking
 4. Signal Driven IO--->阶段①Non Blocking,阶段②Blocking
 5. Asynchronous IO-->阶段①Non Blocking,阶段②Non Blocking
 
结论:
1.首先阻塞与非阻塞,这个是针对用户线程的角度来说的,
2.从计算机的位运算来说除去5是非阻塞式I/O,其他都是阻塞式I/O
3.从阶段①来看,1,3是阻塞式I/O,2,4,5是非阻塞式I/O
4.从效率的某种程度上来说,3,5模型优于其他,但5操作复杂,3就成了最热门的。

辨析 同步与异步
1.同步是Synchronous Communication
2.异步是Asynchronous Communication

同步异步谈的是通讯的机制,与阻塞非阻塞无关,
同步与异步,是针对CPU的角度来说的,
下图的1.2.3.4都属于同步I/O,因为最终的数据拷贝都是CPU调度拷贝的,
异步I/O则不然,数据准备与数据拷贝全部都是由I/O设备去做的,I/O设备完事后给了CPU一个信号而已。


    
    

Linux I/O彻底解惑

相关文章:

  • 2022-12-23
  • 2021-12-19
  • 2021-08-20
  • 2021-12-22
  • 2021-09-18
  • 2021-07-07
  • 2021-10-10
猜你喜欢
  • 2021-10-04
  • 2021-06-07
  • 2021-08-04
  • 2022-01-02
  • 2021-12-02
  • 2022-01-29
相关资源
相似解决方案