當前位置:編程學習大全網 - 源碼下載 - 科特林語(十二):頻道

科特林語(十二):頻道

(1)通道翻譯成通道或管道,其實就是隊列,是多個進程間數據傳輸的BlockQueue,用於進程間的通信;

(2) Channel使用send和receive方法向管道中寫入和讀取數據,這些方法是非阻塞的掛起函數;

(3)信道是壹個熱流,不管有沒有訂戶,上遊都會傳輸數據。

(1)我們發現這樣,其實我們壹直在等待讀取通道中的數據,只要有數據就會被讀取;

②最後壹行做完了!如果沒有打印出來,說明程序還沒有結束,壹直在等待讀取數據。

(1)調用close方法就像向通道發送壹個特殊的close指令。這種叠代停止,表明已經接收到關閉指令;

(2)可以保證在信道關閉之前可以接收到所有先前發送的元素;

(3)調用close會立即停止接受新元素,isClosedForSend會立即返回true。但是,由於通道緩沖區的存在,此時可能不會處理某些元素,因此isClosedForReceive只有在讀取了所有元素後才會返回true。

(1)通道是壹個接口,它繼承了兩個接口:SendChannel和ReceiveChannel。

(2) SendChannel提供傳輸數據的功能,主要接口如下:

-send是壹個掛起函數,它將指定的元素發送到該通道,並在該通道的緩沖區已滿或不存在時掛起調用方。如果通道關閉,則在發送調用時會拋出異常;

-trySend在不違反其容量限制的情況下,立即將指定元素添加到此通道,並返回成功。否則,返回失敗或關閉;

-close關閉通道;

-isClosedForSend確定通道是否已關閉。如果它是關閉的,調用send將拋出異常。

(3) ReceiveChannel提供接收數據的功能,主要接口如下:

-receive如果該通道不為空,則從該通道中檢索和刪除元素;如果通道為空,調用方被掛起;如果通道在沒有接收的情況下關閉,則會引發ClosedReceiveChannel異常;

-tryReceive如果該通道不為空,則從中檢索和刪除元素,並返回成功結果;如果通道為空,則返回失敗結果;如果通道關閉,則返回關閉結果;

-receiveCatching如果此通道不為空,則從其中檢索和刪除元素,並返回成功結果;如果通道為空,則返回失敗結果;如果通道關閉,則返回關閉原因;

-isEmpty判斷通道是否為空;

-isClosedForReceive確定通道是否已關閉。如果是關閉的,調用receive會拋出異常;

- cancel(原因:CancellationException?= null)出於可選原因取消接收該信道的剩余元素。此函數用於關閉通道並刪除其中所有緩沖的元素;

-iterator()返回通道的叠代器。

(4)創建不同類型的渠道

-集合通道0大小的緩沖區(默認類型)

-無限通道無限元素,發送不暫停。

-Buffered channel指定大小,當它已滿時,發送掛起。

-沖突的通道新元素將覆蓋舊元素,接收方將只獲得最新的元素,發送將永遠不會掛起。

(1)通過produce方法啟動壹個生產者進程,並返回壹個ReceiveChannel,這樣其他進程就可以利用這個通道接收數據;

(2) actor可以用來建立壹個消費者契約,返回壹個發送通道,這樣其他契約就可以使用這個通道發送數據。

(1) BroadcastChannel被標記為過時,請使用SharedFlow和StateFlow替換它。

(2)1中的例子提到了壹對多的情況。從數據處理本身來說,當有多個接收方時,同壹元素只會被壹個接收方讀取;而BroadcastChannel不是,多個接收方之間不存在互斥。

使用broadcast()擴展函數將頻道轉換為BroadcastChannel。

  • 上一篇:我是剛創業,想自己做壹個網站或者app找公司做還是個人那種
  • 下一篇:落花生的讀書筆記怎麽寫
  • copyright 2024編程學習大全網