gRPC原始碼 transport 流控

2021-09-13 17:10:19 字數 825 閱讀 3126

在liangzhiyang/annotate-grpc-go基礎上補充了部分注釋

http/2 流量控制的目標,在流量視窗初始值的約束下,給予接收端以全權,控制當下想要接受的流量大小。

// 用於傳送流控。 將當前可用的quota(位元組數)寫入c,有資料傳送需要時,從c中獲取。acquire到的大小即為可支援的最大傳送量。

// acquire 將quota全部獲取出來,根據實際使用量,將未使用的重新add回pool。

type quotapool struct

http2client.write消耗quota,client跟stream有各自的控制。

handlewindowupdate補充quota。

//用於接收流控。ondata通過判斷pendingdata、pendingupdate之和是否超過limit來進行流控。

type inflow struct

pendingdata:handledata->ondata增加pendingdata->s.write(可供io.readfull讀取)

pendingupdate:io.readfull(s1, p)->stream.read讀取資料->windowhandler->updatewindow->onread減少pendingdata,按照1/4limit量還清空pendingupdate->windowupdate->framer.writewindowupdate更新傳送端視窗大小->傳送端處理handlewindowupdate(id=0更新client,非0更新對應stream)

->進而增加傳送端quota

《原始碼閱讀》原始碼閱讀技巧,原始碼閱讀工具

檢視某個類的完整繼承關係 選中類的名稱,然後按f4 quick type hierarchy quick type hierarchy可以顯示出類的繼承結構,包括它的父類和子類 supertype hierarchy supertype hierarchy可以顯示出類的繼承和實現結構,包括它的父類和...

Cartographer原始碼篇 原始碼分析 1

在安裝編譯cartographer 1.0.0的時候,我們可以看到 主要包括cartorgarpher ros cartographer ceres sover三個部分。其中,ceres solver用於非線性優化,求解最小二乘問題 cartographer ros為ros平台的封裝,獲取感測器資料...

python原始碼剖析 Python原始碼剖析

第頁共 頁python 原始碼剖析 物件機制 1.物件 在python 的世界中,一切都是物件,乙個整數是乙個物件,乙個字串也是 乙個物件,更為奇妙的是,型別也是乙個物件,整數型別是乙個物件,字串類 型也是乙個物件。從 年guido 在那個聖誕節揭開 python 世界的大幕開始,一直到現在,pyt...