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