網絡編程概念 同步/異步/阻塞/非阻塞

同步/異步/阻塞/非阻塞

同步和異步:

同步和異步對應於調用者與被調用者,它們是線程之間的關係,兩個線程之間要麼是同步的,要麼是異步的。

  • 同步操作時,調用者需要等待被調用者返回結果,纔會進行下一步操作。

  • 異步操作時,調用者不需要等待被調用者返回調用即可進行下一步操作,被調用者通常依靠事件、回調等機制來通知調用者結果。

同步和異步 IO:

同步 IO 是用戶線程發起 I/O 請求後需要等待或者輪詢內核 I/O 操作完成後才能繼續執行。

異步 IO 是用戶線程發起 I/O 請求後仍可以繼續執行,當內核 I/O 操作完成後會通知用戶線程,或者調用用戶線程註冊的回調函數。


阻塞和非阻塞:

阻塞與非阻塞是對同一個線程來說的,在某個時刻線程要麼處於阻塞,要麼處於非阻塞 。阻塞和非阻塞關注的是程序在等待調用結果(消息,返回值)時的狀態:

  • 阻塞調用是指調用結果返回之前,當前線程會被掛起,調用線程只有在得到結果之後纔會返回。

  • 非阻塞調用指在不能立刻得到結果之前,該調用不會阻塞當前線程。

阻塞和非阻塞 IO:

  • 阻塞 IO 是指 I/O 操作需要徹底完成後才能返回用戶空間 。

  • 非阻塞 IO 是指 I/O 操作被調用後立即返回一個狀態值,無需等 I/O 操作徹底完成。


同步阻塞:

發送方發送請求之後一直等待響應。

接收方處理請求時進行的IO操作如果不能馬上等到返回結果,就一直等到返回結果後,才響應發送方,期間不能進行其他工作。

例子:男生向女生表白後,男生一直在等待結果,女生一直在思考結果。

同步非阻塞:

發送方發送請求之後一直等待響應。

接收方處理請求時進行 IO 操作如果不能馬上得到結果直接返回一個狀態值,去做其他事情。當IO操作完成後將完成狀態和結果通知接收方,接收方再響應發送方,發送方纔進入下一次請求過程。

例子:男生向女生表白後,男生一直在等待結果,女生決定先想想以後再說。

異步阻塞:

發送方向接收方請求後,不等待響應,可以繼續其他工作。

接收方處理請求時進行IO操作如果不能馬上得到結果,就一直等到返回結果後,才響應發送方,期間不能進行其他操作。

例子:男生向女生表白後,男生打籃球去了,女生一直在思考結果。

異步非阻塞:

發送方向接收方請求後,不等待響應,可以繼續其他工作。

接收方處理請求時進行 IO 操作如果不能馬上得到結果直接返回一個狀態值,去做其他事情。 當IO操作完成後將完成狀態和結果通知接收方,接收方再響應發送方,發送方纔進入下一次請求過程。

例子:男生向女生表白後,男生打籃球去了,女生玩瑤去了。

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章