NIO操作型別與就緒條件

2021-05-26 08:06:05 字數 975 閱讀 2229

使用nio程式設計時,對nio就緒選擇的理解,是nio程式設計的關鍵。nio與傳統io的區別是提供了就緒選擇的能力,為原來的阻塞的io提供了非阻塞的能力,從而為我們提供了用少量的執行緒數量同時為大量的連線通訊的可能。

1、操作型別

nio的就緒選擇共涉及4個操作:op_read, op_write, op_accept, op_connect。客戶端對應的通道是socketchannel,服務端對應的通道是serversocketchannel。就緒操作與通道對應關係:

op_accept

op_connect

op_write

op_read

客戶端socketchannelyy

y服務端

serversocketchannel

y服務端

socketchannelyy

客戶端的socketchannel支援 op_connect, op_read, op_write三個操作。服務端serversocketchannel只支援op_accept操作,在服務端由serversocketchannel的accept()方法產生的socketchannel只支援op_read, op_write操作。

2、就緒條件

op_accept就緒條件:

當收到乙個客戶端的連線請求時,該操作就緒。這是serversocketchannel上唯一有效的操作。

op_connect就緒條件:

只有客戶端socketchannel會註冊該操作,當客戶端呼叫socketchannel.connect()時,該操作會就緒。

op_read就緒條件:

該操作對客戶端和服務端的socketchannel都有效,當os的讀緩衝區中有資料可讀時,該操作就緒。

op_write就緒條件:

該操作對客戶端和服務端的socketchannel都有效,當os的寫緩衝區中有空閒的空間時,該操作就緒。

操作過載與型別轉換

運算子在某種程度上也是一種函式,它是一種名為跟在關鍵字operator後的符號的函式,它也有返回值 引數列表 函式體,運算子的過載必須滿足一下兩個條件中的乙個 1 是某個類的成員函式2 它的引數中有某種類型別。因此是不允許對內建型別進行運算子過載的,另外大部分的運算子都是可以過載的,但是也有四到五個...

Tensorflow 基礎型別定義與操作

張量tensor包含type,rank和shape三個屬性 tensor型別 張量型別 python型別 dt float tf.float32 dt double tf.float64 dt int64 tf.int64 dt int32 tf.int32 dt int16 tf.int16 dt...

原子操作與原子型別

多執行緒是併發程式設計中不可或缺的部分,而所謂原子操作,也就是指多執行緒中 最小的且不可並行化的 操作,如果乙個共享資源的操作時原子操作的話,意味著多個執行緒訪問該資源時,有且僅有乙個執行緒在對這個資源進行操作。通常情況下,原子操作都是通過 互斥 來實現的,例如mutex。這種操作在開發當中使用相當...