11、Swoole 中涉及的一些基本概念

arunfung發表於2020-05-31

IO(Input/Output,輸入輸出)

在計算機中,輸入/輸出(即IO)是指資訊處理系統(比如計算機)和外部世界(可以是人或其他資訊處理系統)的通訊。輸入是指系統接收的訊號或資料,輸出是指從系統發出的資料或訊號。由於程式和執行時資料是在記憶體中駐留,由CPU這個超快的計算核心來執行,涉及到資料交換的地方,通常是磁碟、網路等,就會有IO產生。

同步-非同步

同步和非同步是一種訊息通訊機制 (synchronous communication/ asynchronous communication),關注點在於 被呼叫者返回結果返回 之間的關係, 描述物件是被呼叫物件的行為。


# 同步(Synchronous):在發出一個同步呼叫時,在沒有得到結果之前,該呼叫就不返回,等待返回結果才繼續執行後續的操作。

# 非同步( Asynchronous):發出呼叫,直接返回,不關心是否返回結果。非同步可以通過狀態、回撥、 通知呼叫者結果,可以先去執行其他操作,然後等待通知再回來執行剛才沒執行完的操作。

阻塞-非阻塞

阻塞和非阻塞是一種業務流程處理方式。關注點在於呼叫發生時 呼叫者狀態被呼叫者返回結果 之間的關係。 描述的是等待結果時候呼叫者的狀態。 此時結果可能是同步返回的,也能是非同步返回。


# 阻塞( Blocking ):在結果返回之前,當前執行緒被掛起,後續程式碼只有在結果返回後才能執行。

# 非阻塞( Nonblocking):在不能立刻獲取結果前,該呼叫不會阻塞當前執行緒。

同步阻塞-同步非阻塞

實際程式設計中,通過執行緒實現程式的同步非阻塞,通過協程實現執行緒的同步非阻塞。


# 同步阻塞:打電話問老闆有沒有某書(呼叫),老闆說查一下,讓你別掛電話(同步),你一直等待老闆給你結果,什麼事也不做(阻塞)。

# 同步非阻塞:打電話問老闆有沒有某書(呼叫),老闆說查一下,讓你別掛電話(同步),等電話的過程中你還一邊嗑瓜子(非阻塞)。

非同步阻塞-非同步非阻塞


# 非同步阻塞:打電話問老闆有沒有某書(呼叫),老闆說你先掛電話,有了結果通知你(非同步),你掛了電話後(結束呼叫), 除了等老闆電話通知結果,什麼事情也不做(阻塞)。

# 非同步非阻塞:打電話問老闆有沒有某書(呼叫),老闆說你先掛電話,有了結果通知你(非同步),你掛電話後(結束呼叫),一遍等電話,一遍嗑瓜子。(非阻塞)

IO模型

5種 I/O 模型:

  • 阻塞式I/O

  • 非阻塞式I/O

  • I/O複用(select,poll,epoll…)

  • 訊號驅動式I/O(SIGIO)

  • 非同步I/O(POSIX的aio_系列函式)

IO模型的具體解釋可以參考 linux五種IO模型

參考資源

本作品採用《CC 協議》,轉載必須註明作者和本文連結
  • 著作權歸作者所有。商業轉載請聯絡作者獲得授權,非商業轉載請註明出處。
  • 文章來源blog.arunfung.com

相關文章