1. 程式人生 > >非同步和非阻塞的區別

非同步和非阻塞的區別

我們說Twisted是一個非同步的網路框架,經常我們也聽到一個詞語叫做非阻塞,那麼他們有什麼區別呢?


非同步:呼叫在發出之後,這個呼叫就直接返回,不管有無結果;非同步是過程。

 非阻塞:關注的是程式在等待呼叫結果(訊息,返回值)時的狀態,指在不能立刻得到結果之前,該呼叫不會阻塞當前執行緒。

同步和非同步的區別:

同步:一個服務的完成需要依賴其他服務時,只有等待被依賴的服務完成後,才算完成,這是一種可靠的服務序列。要麼成功都成功,失敗都失敗,服務的狀態可以保持一致

非同步:一個服務的完成需要依賴其他服務時,只通知其他依賴服務開始執行,而不需要等待被依賴的服務完成,此時該服務就算完成了。被依賴的服務是否最終完成無法確定,一次它是一個不可靠的服務序列。

訊息通知中的同步和非同步

  • 同步:當一個同步呼叫發出後,呼叫者要一直等待返回訊息(或者呼叫結果)通知後,才能進行後續的執行;
  • 非同步:當一個非同步過程呼叫發出後,呼叫者不能立刻得到返回訊息(結果)。在呼叫結束之後,通過訊息回撥來通知呼叫者是否呼叫成功

阻塞與非阻塞的區別:

  • 阻塞:阻塞呼叫是指呼叫結果返回之前,當前執行緒會被掛起,一直處於等待訊息通知,不能夠執行其他業務,函式只有在得到結果之後才會返回。
  • 非阻塞:非阻塞和阻塞的概念相對應,指在不能立刻得到結果之前,該函式不會阻塞當前執行緒,而會立刻返回。

同步與非同步是對應的,它們是執行緒之間的關係,兩個執行緒之間要麼是同步的,要麼是非同步的。

阻塞與非阻塞

是對同一個執行緒來說的,在某個時刻,執行緒要麼處於阻塞,要麼處於非阻塞。

阻塞是使用同步機制的結果,非阻塞則是使用非同步機制的結果。