1. 程式人生 > 其它 >關於io阻塞設定以及非阻塞設計的一些抄錄

關於io阻塞設定以及非阻塞設計的一些抄錄

  • 對於監聽的sockfd,最好使用水平觸發模式,邊緣觸發模式會導致高併發情況下,有的客戶端會連線不上。如果非要使用邊緣觸發,網上有的方案是用while來迴圈accept()。
  • 對於讀寫的connfd,水平觸發模式下,阻塞和非阻塞效果都一樣,不過為了防止特殊情況,還是建議設定非阻塞。
  • 對於讀寫的connfd,邊緣觸發模式下,必須使用非阻塞IO,並要一次性全部讀寫完資料。
  • ET模式下每次write或read需要迴圈write或read直到返回EAGAIN錯誤。以讀操作為例,這是因為ET模式只在socket描述符狀態發生變化時才觸發事件,如果不一次把socket核心緩衝區的資料讀完,會導致socket核心緩衝區中即使還有一部分資料,該socket的可讀事件也不會被觸發
  • 根據上面的討論,若ET模式下使用阻塞IO,則程式一定會阻塞在最後一次write或read操作,因此說ET模式下一定要使用非阻塞IO