go lang學習筆記——channel機理及排程理解
《Go語言程式設計》一書介紹了libtask庫,可以認為這個庫等同於go的底層goroutine實現。
libtask庫的channel的資料結構如下:
struct Alt
{
Channel *c;
void *v;
unsigned int op;
Task *task;
Alt *xalt;
};
struct Altarray
{
Alt **a;
unsigned int n;
unsigned int m;
};
struct Channel
{
unsigned int bufsize;
unsigned int elemsize;
unsigned char *buf;
unsigned int nbuf;
unsigned int off;
Altarray asend;
Altarray arecv;
char *name;
};
我們可以看到channel的基本組成如下:
記憶體快取,用於存放元素;
傳送佇列;
接受佇列。
書中羅列完channel的結構後沒有深入講解如何在channel這個結構上進行通訊的過程。其實結合書中前面介紹的內容task(協程)的通訊過程已經不言而明瞭。
但是從學習者的角度,當然是把這個問題講解的越明白越好。接下來我試著介紹一下task(協程)是如何在這個channel的基礎上通訊的。
對於一個往channel裡寫資料的情況:
對於一個從channel裡讀資料的情況:
注意:以上兩個流程都是基於書中對協程的工作原理和channel資料結構的介紹後我個人腦補的,並沒有去翻看libtask的程式碼。很可能存在疏漏,只應當把這兩個流程作為理解協程工作方式的參照。
相關文章
- go channel學習筆記Go筆記
- Linux核心學習筆記(5)– 程式排程概述Linux筆記
- xv6學習筆記(4) : 程式排程筆記
- 機器學習課程筆記機器學習筆記
- 小林coding學習筆記(程序排程演算法)筆記演算法
- 使用 Go Channel 及 Goroutine 時機Go
- Go 學習筆記Go筆記
- Golang學習筆記(十九):Channel初步接觸Golang筆記
- 隨機過程學習筆記——概論隨機筆記
- GO 方法學習筆記Go筆記
- go 學習筆記---切片Go筆記
- go defer 學習筆記Go筆記
- AI學習筆記之——如何理解機器學習(Machine Learning)AI筆記機器學習Mac
- swoole 學習筆記-做一頓飯來理解協程筆記
- Kubernetes全棧架構師(資源排程上)--學習筆記全棧架構筆記
- Kubernetes全棧架構師(資源排程下)--學習筆記全棧架構筆記
- go學習筆記——gin框架Go筆記框架
- 【學習筆記】Go Modules 使用筆記Go
- go 學習筆記---map(字典)Go筆記
- go 閉包學習筆記Go筆記
- Go 進階學習筆記Go筆記
- batch normalization學習理解筆記BATORM筆記
- lua課程學習筆記筆記
- 機器學習筆記---資料預處理機器學習筆記
- 機器學習入門筆記——如何理解梯度下降機器學習筆記梯度
- go 學習筆記之初識 go 語言Go筆記
- 【深入理解Go】協程設計與排程原理(上)Go
- 【深入理解Go】協程設計與排程原理(下)Go
- 3.1處理機排程概述
- 林軒田機器學習基石課程學習筆記14 — Regularization機器學習筆記
- 林軒田機器學習基石課程學習筆記15 — Validation機器學習筆記
- 機器學習學習筆記機器學習筆記
- Go型別特性-學習筆記Go型別筆記
- 【Go學習筆記16】解析xmlGo筆記XML
- GO 學習筆記->結構體Go筆記結構體
- Go 入門指南學習筆記Go筆記
- go-ethereum學習筆記(一)Go筆記
- Go學習筆記-GMP詳解Go筆記