首页 > 其他分享 >阻塞I/O,非阻塞I/O,同步I/O,异步I/O

阻塞I/O,非阻塞I/O,同步I/O,异步I/O

时间:2023-03-03 23:22:59浏览次数:31  
标签:异步 同步 read 阻塞 应用程序 接字

根据应用程序是否阻塞自身运行分为:
阻塞I/O:是指应用程序在执行I/O操作后,如果没有获得响应,
         就会阻塞当前线程,不能执行其他任务。
非阻塞I/O:是指应用程序在执行I/O操作后,不会阻塞当前线程,
           可以继续执行其他的任务
根据I/O响应方式的不同,可分为:
同步I/O:指收到I/O请求后,系统不会立刻响应应用程序,等到处理完成,系统
         才会通过系统调用的方式,告诉应用程序I/O的结果。
异步I/O:指收到I/O请求后,系统会先告诉应用程序I/O请求已经收到,随后去异步
         处理,等处理完成后,系统在通过事件通知的方式,告诉应用程序结果
        
阻塞,非阻塞和同步异步其实就是两个不同角度的I/O划分方式,它们描述的对象也不同;

阻塞非阻塞针对的是io调用者(即应用程序),而同步异步针对的是io执行者(即系统)。


举例如下:
同步异步
系统调用 read 是同步读,所以,在没有得到磁盘数据前,read 不会响应应用程序。
而 aio_read 是异步读,系统收到 AIO 读请求后不等处理就返回了,而具体的 read 结果,
再通过回调异步通知应用程序。

阻塞非阻塞
使用 send() 直接向套接字发送数据时,如果套接字没有设置 O_NONBLOCK 标识,
那么 send() 操作就会一直阻塞,当前线程也没法去做其他事情。
当然,如果你用了 epoll,系统会告诉你这个套接字的状态,那就可以用非阻塞的方式使用。
当这个套接字不可写的时候,你可以去做其他事情,比如读写其他套接字。

转载自:极客时间专栏。

标签:异步,同步,read,阻塞,应用程序,接字
From: https://www.cnblogs.com/fulaien/p/17177339.html

相关文章