允許 sleep/awaken 動作的 process 稱之為 blocking I/O,反之不允許 sleep 動作的稱之為 non-blocking I/O。
採用 blocking I/O 的時候,必須做到以下兩個基本動作:一,當 process 進行 read 動作但是資料尚未就緒時,process 必須被 block 住 (sleep),而當有資料進來時就需要立即被喚醒 (awaken),就算資料仍不完整也是。二,當 process 進行 write 動作但是 buffer 沒有空間時,process 也必須被 block 住,而且必須被放到跟 read 動作不同的 wait queue 中去等待 wake-up (buffer 騰出空間寫入)。
而 non-blocking I/O 的 read/write 行為方式就很不同了,簡單的說,當讀不到資料或寫不進 buffer 時,他會送出 retry 的動作,再試一次。