同步,异步,阻塞,非阻塞是什么意思?

首先,本文讨论的单线程的问题,多CPU多线程的情况不在考虑范围,不过思想都是一样的。

同步和异步

同步是说当前代码不执行完,后面的代码,或者严谨点说,后面的指令将不执行。

例如[1],下列,select 函数不返回,下面的代码将不会执行。

 

异步,只是简单地向操作系统注册完一个函数,操作系统在IO操作完成后,用信号通知该进程。例如[2],

第一行,signal不必等到 on_input 函数执行完才执行后面的指令,而是立即返回。那 on_input 什么时候执行呢,进程通过什么方式知道该执行了呢?信号,当内核发送一个特有的信号,这里是SIGIO,进程将执行 on_input 函数,执行完再回到原来的地方。

 

阻塞和非阻塞

阻塞和非阻塞是说,进程是否由运行态变成阻塞态,这时,操作系统将会将该进程挂在阻塞队列上,并选择其他就绪进程上CPU,所以,阻塞对当前进程是种时间和效率上的浪费。阻塞是说,当前操作会引起进程进入阻塞态,例如普通的打开文件操作,就会阻塞自己,直到内核返回。而非阻塞是否,当前操作不会引起进入阻塞态。

那么同步阻塞,同步非阻塞,异步非阻塞,异步阻塞是说什么呢?

其实,最后一个名词是个伪命题,异步不会引起进程进入阻塞态,例如上面的注册回调函数的操作。

同步阻塞就是我们普通的打开文件操作,同步非阻塞,是指,进程调用select等系统调用[3],而且把该系统调用的超时时间设置为0时,select函数会立即返回,不会阻塞当前进程,不会引起进程进入阻塞态。而且,后面的指令也必须在select等执行完之后再执行,这二者一组合,就变成了同步非阻塞。而异步非阻塞的意思就是异步操作了,上面已经提过了。

参考资料:

1. ostep第33章 ostep

2. 《Unix/Linux编程实践教程》 第7章12节,第15章第2节

3.   select是同步阻塞还是非阻塞

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值