同步/阻塞/非阻塞是什麼意思

同步、阻塞和非阻塞是描述操作或函數如何與其調用者互動的術語,通常用於描述I/O操作、網絡通信或任何可能需要等待某些事件發生才能繼續的程式。

  1. 同步:

    • 同步操作是指調用者必須等待操作完成後才能繼續執行。
    • 當一個同步I/O操作發生時,程式會一直等待直到操作完成,然後才會繼續執行其後續指令。
    • 同步操作保證了調用者會直接得到操作的結果,但這通常會導致線程或進程被阻塞。
  2. 阻塞:

    • 阻塞操作是指一個操作導致調用者被阻塞,直到操作完成。
    • 當一個線程調用一個阻塞函數時,該線程會被掛起,直到操作完成。
    • 阻塞操作通常用於同步I/O,例如讀取檔案或等待網絡數據。
  3. 非阻塞:

    • 非阻塞操作是指調用者不需要等待操作完成,而是可以立即返回控制權,並在操作完成時通過某種方式獲取結果。
    • 當一個非阻塞I/O操作發生時,程式會立即返回,不管操作是否完成,然後程式可以繼續執行其他任務。
    • 非阻塞操作通常與輪詢或事件通知結合使用,以檢查操作是否已經完成。

在實際應用中,同步和阻塞通常一起使用,因為同步操作通常會阻塞調用者。同樣,非阻塞和異步通常一起使用,因為非阻塞操作允許調用者以異步方式處理其他任務。

例如,在網絡編程中,一個同步的、阻塞的TCP套接字會導致客戶端程式在收到數據之前一直等待,而一個非阻塞的套接字允許程式在數據準備好之前繼續執行其他代碼。