解釋同步\非同步、阻塞\非阻塞、並行\併發之間的區別
阿新 • • 發佈:2018-12-13
一、同步:執行一個操作之後,等待結果,然後才繼續執行後續的操作。非同步:執行一個操作後,可以去執行其他的操作,然後等待通知再回來執行剛才沒執行完的操作。
同步和非同步關注的是訊息通訊機制,所謂同步,就是在發出一個呼叫時,在沒有得到結果之前,該呼叫就不返回,但是一旦呼叫返回,就得到返回值了;換句話說,就是由呼叫者主動等待這個呼叫的結果。
而非同步則相反,呼叫在發出之後,這個呼叫就直接返回了,所以沒有返回結果。換句話說,當一個非同步過程呼叫發出後,呼叫者不會立刻得到結果,而是在呼叫發出後,被呼叫者通過狀態、通知來通知呼叫者,或通過回撥函式處理這個呼叫。
二、阻塞:程序給CPU傳達一個任務之後,一直等待CPU處理完成,然後才執行後面的操作。非阻塞:程序給CPU傳達任務後,繼續處理後續的操作,隔斷時間再來詢問之前的操作是否完成。這樣的過程其實也叫輪詢。
阻塞和非阻塞關注的是程式在等待呼叫結果(訊息,返回值)時的狀態。
阻塞呼叫是指呼叫結果返回之前,當前執行緒會被掛起。呼叫執行緒只有在得到結果之後才會返回。
非阻塞呼叫指的在不能立刻得到結果之前,該呼叫不會阻塞當前執行緒。
三、並行是指運算中的兩件或更多件事情在同一時刻發生。實事求是地說,這種情況只會在系統CPU擁有兩個獨立核心時發生,這樣在任何時刻才會有不同的電脈衝訊號發出。併發意味著至少兩件事務在同一時間段發生。但注意,這裡的事務是(高階的)任務,而不是(低階的)操作。所以,請分清併發和並行。