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筆記
- OS學習筆記三:處理器排程筆記
- xv6學習筆記(4) : 程式排程筆記
- 使用 Go Channel 及 Goroutine 時機Go
- Linux核心學習筆記(5)– 程式排程概述Linux筆記
- Go 學習筆記Go筆記
- 小林coding學習筆記(程序排程演算法)筆記演算法
- Golang學習筆記(十九):Channel初步接觸Golang筆記
- GO 方法學習筆記Go筆記
- go defer 學習筆記Go筆記
- go 學習筆記---切片Go筆記
- Go 方法 學習筆記Go筆記
- Go 介面 學習筆記Go筆記
- Go 反射 學習筆記Go反射筆記
- 隨機過程學習筆記——概論隨機筆記
- 大資料學習筆記(十五)-大資料排程框架大資料筆記框架
- swoole 學習筆記-做一頓飯來理解協程筆記
- 【學習筆記】Go Modules 使用筆記Go
- Go 進階學習筆記Go筆記
- go 閉包學習筆記Go筆記
- go 學習筆記---map(字典)Go筆記
- 【Go學習筆記4】切片Go筆記
- Go 函式 學習筆記Go函式筆記
- Go 結構 學習筆記Go筆記
- go學習筆記——gin框架Go筆記框架
- batch normalization學習理解筆記BATORM筆記
- go 學習筆記之初識 go 語言Go筆記
- gevent 學習筆記 —— 協程筆記
- lua課程學習筆記筆記
- Go 入門指南學習筆記Go筆記
- GO 學習筆記->結構體Go筆記結構體
- go-ethereum學習筆記(一)Go筆記
- Go學習筆記-GMP詳解Go筆記
- Go學習筆記-Zap日誌Go筆記
- Go型別特性-學習筆記Go型別筆記
- go學習筆記劃重點Go筆記
- 【Go學習筆記16】解析xmlGo筆記XML
- 【Go學習筆記15】解析yamlGo筆記YAML