官术网_书友最值得收藏!

2.2 同步與異步、阻塞與非阻塞

在IO體系中,經常能接觸到同步阻塞、異步非阻塞等概念,往往使人疑惑,在多線程環境下,多線程不就是非阻塞的,單線程就是阻塞的嗎?多線程不就是異步,單線程不就是同步嗎?這種普遍的疑惑,事實上是由于概念的不清晰造成的。

多線程、單線程、同步、異步、阻塞、非阻塞,都是獨立的概念,只是在多數應用場景下,它們看上去一致,所以造成了概念的混淆。

(1)在多線程語境下的概念

在多線程語境下,用于描述任務的線程訪問執行機制,同步和異步關注的是任務是否可以同時被調用,阻塞和非阻塞則關注的是線程的狀態。

1)同步:指代碼的同步執行(Synchronous Invoke),一個執行塊同一時間只有一個線程可以訪問;

2)異步:指代碼的異步執行(Asynchronous Invoke),多個執行塊可以同時被多個線程訪問;

3)阻塞:線程阻塞狀態(Thread Block),表示線程掛起;

4)非阻塞:線程不處于阻塞狀態,表示線程沒有掛起。

(2)在IO語境下的概念

在IO語境下,用于描述IO操作,同步和異步關注的是消息發起和接收的機制,阻塞和非阻塞則是表達發起者等待結果時的狀態。

1)同步:是指發起一個IO操作時,在沒有得到結果之前,該操作不返回結果,只有調用結束后,才能獲取返回值并繼續執行后續的操作。

2)異步:是指發起一個IO操作后,不會得到返回,結果由發起者自己輪詢,或者IO操作的執行者發起回調。

3)阻塞:是指發起者在發起IO操作后,不能再處理其他業務,只能等待IO操作結束。

4)非阻塞:是指發起者不會等待IO操作完成。

(3)并發與并行的區別

1)并發(Concurrency):指在同一時刻只能有一條指令執行,但多個進程指令被快速地輪換執行,使得在宏觀上具有多個進程同時執行的效果,但在微觀上并不是同時執行的,只是把時間分成若干段,使多個進程快速交替地執行。

2)并行(Parallel):指在同一時刻,有多條指令在多個處理器上同時執行。所以無論從微觀還是從宏觀來看,二者都是一起執行的。

主站蜘蛛池模板: 大连市| 虹口区| 文化| 沙田区| 汪清县| 衢州市| 宁明县| 巴马| 石家庄市| 张家川| 原平市| 河津市| 怀仁县| 台中市| 富平县| 宜兰县| 乐业县| 南部县| 阳春市| 肥城市| 民和| 呼图壁县| 渝北区| 石渠县| 招远市| 太仆寺旗| 皋兰县| 大连市| 达州市| 井冈山市| 金川县| 丹寨县| 三门县| 云浮市| 钟山县| 博湖县| 涿鹿县| 威信县| 青河县| 娱乐| 吐鲁番市|