日期:2014-05-16  浏览次数:20654 次

Linux 同步/异步 阻塞/非阻塞
同步阻塞IO:
设备IO忙时,内核对发起IO请求的进程说:“现在设备忙,你别走开,在这里等吧,你看IO什么时候做完,做完了你把数据拿走就是了”
发起IO请求的进程说:“好,那我在这等你”

同步非阻塞IO:
设备IO忙时,内核对发起IO请求的进程说:“我已经知道你要IO了,但设备现在有点忙,你回家吧,我会记住你这个事的,我有记录呢,只要设备一空闲我就给你做IO的,做完了给你打电话让你过来拿数据”
发起IO请求的进程说:“IO还没做完呢,我不走,我要不断的问我的IO什么时候完成,知道你把我的IO做完为止”

异步阻塞IO:
设备IO忙时,内核对发起IO请求的进程说:“现在设备忙,你别走开,在这里等吧,你看IO什么时候做完,做完了你把数据拿走就是了”
发起IO请求的进程说:“哦,您忙吧,我在这里排队等着呢,不过我排队时也无聊,就做做其他的事情吧,我会时不时就看看我的IO做完没有的”

异步非阻塞IO:
设备IO忙时,内核对发起IO请求的进程说:“我已经知道你要IO了,但设备现在有点忙,你回家吧,我会记住你这个事的,我有记录呢,只要设备一空闲我就给你做IO的,做完了给你打电话让你过来拿数据”
发起IO请求的进程说:“好吧,您看我事也挺多的,既然现在IO一时半会也完成不了,那我先回家去做做其他的事吧,谢谢啊”


总结:
阻塞/非阻塞是内核级的,同步/异步是进程级的,同步非阻塞和异步阻塞一般不会采用,异步非阻塞一般效率比较高,他能够把cpu和io并行处理,当然,如果没有cpu和io并行的这种情况,那就用同步阻塞比较好,这样编程比较简单,且不用多次在内核空间和用户空间进行切换

参考:
http://www.ibm.com/developerworks/cn/linux/l-async/