Go語言併發編程(2):channel 通道介紹和使用

一、簡介

channel 不僅可以用於 goroutine 間進行安全通信,還可以用於同步內存訪問。

而且 Go 社區強烈推薦使用 channel 通道實現 goroutine 之間的通信,

不要通過共享內存來通信,而應該通過通信來共享內存。

Go 從語言層面保證了同一時間只有一個 goroutine 能夠訪問 channel 裏的數據,從而保證數據安全。

在 Go 中使用 channel 通信,通過通信來傳遞內存數據,讓內存數據可以在不同的 goroutine 之間進行傳遞,而不是

用共享內存來通信。

二、channel 的基本使用

前面有 2 篇文章介紹 chanel 的使用:

還有 1 篇講 channel 的原理:

三、channel 使用注意事項

關閉 channel

  • 一般由發送端關閉 channel
  • 向一個已經關閉的 channel 發送數據,會 panic
  • 讀取關閉的 channel ,返回零值

nil channel

  • 讀取一個 nil channel,操作將阻塞

所以需要阻塞時,你可以手動修改 channel 爲 nil,就會出現阻塞效果。

for...range... 遍歷channel

當 for range 遍歷 channel 時,如果發送者沒有關閉 channel 或在 range 之後關閉,會導致死鎖。

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章