【Go基礎篇】徹底搞懂 Channel 實現原理

最近大傢私信我讓我說說 Go 語言中的 Channel,年末瞭,有的人已經開始準備面試,真快呀!今天我們就來說說 Channel嗎,日常開發中使用也是比較頻繁的,面試也是高頻。聽我慢慢說來。

Channel (通道) 是 Go 語言高性能並發編程中的核心數據結構和與 Goroutine 之前重要的通信方式。在 Go 語言中通道是一種特殊的類型。通道像一個傳送帶或者隊列,遵循先入先出(First In First Out)的規則,保證收發數據的順序。

1. 應用場景

在很多主流的編程語言中,多個線程間基本上都是通過共享內存來實現通信的,如Java。這類語言往往都需要限制一定的線程數量從而解決線程競爭。用圖的方式簡單表達一下。

Go 語言的設計卻截然不同,在 Go 語言提供瞭一種新的並發模型,在 Goroutine 中使用 Channel 傳遞數據,從而實現通信。

Go 語言提倡 “不要通過共享內存的方式進行通信,而是通過 Channel 通信的方式共享內存”。

Don’t communicate by sharing memory, share memory by communicating

我們會結合 chanal 使用場景的 5 大類型來闡述,更好的瞭解 Channel。

  • 數據交流
  • 數據傳遞
  • 信號通知
  • 任務編排

接下來學一下一下 chanel 的常見用法。

2. 常見用法

我們一開始就說 Go 語言是通過通信來實現共享內存的,故我們可以從 channel 中接受數據,也能發送數據。下文中會簡稱 channek 為 chan。我們將從一下三種情況展開說下

  • 僅接送數據
  • 僅發送數據
  • 既能接受也能發送數據

chan int // 可以發送和接收 int 數據
chan <- struct{} // 隻能發送 struct{}
<-chan string // 隻能從 chan 接收 string 數據

发表回复

相关推荐

幹貨:帶你深入瞭解WEEE!!!

一、什麼是WEEE?WEEE即Waste Electrical andElectronic E (WEEE) Directive(2002/96/EC)報廢的電子電氣設備,

· 4秒前

24北电考研世界电影史——欧洲先锋派电影运动

本期,局子继续带大家来梳理世界电影史——欧洲先锋派电影运动,小提示:本期结合同时期艺术基础理论知识学习更佳哟~

· 14秒前

真相贴 | 再5分钟就好 10个女生最习惯说的甜蜜小谎言

1. “再5分钟,我马上就好了” 你放心,5分钟绝对不是一个确切的数值,它只是一个状态的描述,就是“还没好”,这5分钟可以是半 ...

· 24秒前

新加坡三大銀行的優勢?

新加坡星展銀行星展銀行(DBS),是新加坡最大的銀行,也是新加坡的國有控股銀行。曾被《環球金融》雜志評為“亞洲最安全銀行”,...

· 33秒前

显卡的发展史(四)-核弹降临

1945年四月,在一个阳光明媚的下午,美国白宫里倒下一个残疾的老人,他心有不甘,自己的任务还没能完成,但是上帝却依然要带 ...

· 43秒前

Copyright 2015-2025 www.icpchaxun.com ©All Rights Reserved.