码迷,mamicode.com
首页 > 其他好文 > 详细

同步与异步IO && blocking 与nonblocking 原理

时间:2020-05-08 18:34:11      阅读:59      评论:0      收藏:0      [点我收藏+]

标签:linux   aio   locking   inux   复用   函数   行数据   用户态   调用   

同步IO

  • 进程A发起一个read IO中断,进入内核态,操作系统通知控制器/适配器进行IO操作
  • read操作完成,控制器发起一个中断通知操作系统已经读取完成
  • 用户态进程A,可以读取数据

异步IO

  • 进程A发起一个read IO中断,可以设置buf地址或者callback函数,进入内核态,操作系统通知控制器进行IOread操作
  • read操作完成,控制器发起一个中断通知操作系统已经读取完成
  • 内核会将数据读入buf,或者调用callback函数
  • 然后内核会通知进程A,读取成功,
  • 进程A可以直接使用数据,不需要进行读取

linux异步IO的接口一般是使用AIO接口,而且是使用buf的方式进行数据读取。原因应该是,直接让内核调用用户代码会过于危险。

blocking 与 nonblocking IO

blocking 与 nonblocking 是同步IO的不同方式。nonblocking 一般要与select或者epoll之类的IO event函数配合使用,利用IO多路复用与多线程机制提高IO吞吐量。

同步与异步IO && blocking 与nonblocking 原理

标签:linux   aio   locking   inux   复用   函数   行数据   用户态   调用   

原文地址:https://www.cnblogs.com/goerzh/p/12851682.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!