應用進程是:小明 內核:小王 1 阻塞式I/O模型: 小明向小王借大米做飯,小王暫時沒有,但是小明這時候其它啥事情也不做了(例如這時候他還可以洗菜),就在哪裡等的,直到小王有了大米,然後小明把大米搬運到自己家裡,開始做飯。 2 非阻塞式I/O模型: 小明向小王借大米做飯,小王暫時沒有,但是小明這時候 ...
應用進程是:小明
內核:小王
1 阻塞式I/O模型:
小明向小王借大米做飯,小王暫時沒有,但是小明這時候其它啥事情也不做了(例如這時候他還可以洗菜),就在哪裡等的,直到小王有了大米,然後小明把大米搬運到自己家裡,開始做飯。
2 非阻塞式I/O模型:
小明向小王借大米做飯,小王暫時沒有,但是小明這時候這時候他去洗菜了,每洗一回就去問小王大米準備好了嗎,直到小王有了大米,然後小明把大米搬運到自己家裡,開始做飯。
3 I/O 復用模型:
村裡面好多人做飯沒有米了,都去向小王借米。這樣的話無論是向小王借米的人每隔一段時間問小王也好,還是在哪裡死等小王的消息也罷,借米的人都至少不會好好的做其他的事情了,
這樣大家就找一個代理人,然後大家吧情況和這個代理人說了,讓這個代理人和小王交互。等有數據到達的時候,這個代理人就通知具體的某個人,然後這個人把大米搬運到自己家裡面,開始做飯。
4 信號驅動模型:
小明向小王借大米做飯,小王暫時沒有,但是小明這時候去洗菜,而不是在哪裡等著,或者不斷的問小王,因為小王有了大米會主動通知小明,等通知到來的時候,小明把大米搬運到自己家裡,開始做飯。
5 非同步模型:
小明向小王借大米做飯,小明向小王說完借大米的事情就去做別的事情了,等小王有了大米,並且主動把大米搬運到小明的家裡,才通知小明大米到了,這時候小明開始做飯。
同步:應用進程主動拷貝數據到用戶空間。
非同步:內核負責拷貝數據到用戶空間,這個過程中應用進程還在做自己的事情。
阻塞,非阻塞,I/O復用,信號驅動,都是同步。最後的非同步才是真正的非同步。
參考:
http://blog.csdn.net/lovelinx/article/details/39924473