福哥答案2020-11-06:
·MPG模型:goroutine的并發模型可以歸納為MPG模型;
·MPG概念:執行緒(machine,系統執行緒,物理執行緒)-內核(processor)-協程(goroutine,用戶執行緒,邏輯執行緒);
·多對多調度模型:整體調度遵循多對多模型,多個協程(約百萬級)同時調度在多個執行緒(約千級)下;
·LRQ(LocalRunningQueue):本地運行佇列,一個M執行在一個P的背景關系中,P中掛載著一個G佇列;
·GRQ(GlobalRunningQueue):全域運行佇列,G沒有初始化時或者沒有LRQ可供掛載時就被丟入GRQ;
·GRQ=>LRQ:MP會在LRQ執行完畢檢查GRQ,并從中竊取任務掛載到當前LRQ中執行,平時也會定期檢查;
·調度的目的:調度的目的是防止執行緒堵塞、閑置、被OS掛起(syscall);
·防止執行緒M堵塞:G1協程IO時脫離MP,G2從當前MP的LRQ中彈出并執行;
·防止執行緒M閑置:M1閑置時,會從M2的LRQ中竊取一半任務,掛載到自己的LRQ中執行;
·防止執行緒M被OS掛起(syscall):P帶著LRQ掛到其它執行緒的下面執行,當syscall結束時,M會嘗試將G0掛載到其它LRQ中或GRQ中;
詳細go調度器模型參考:
Go語言中文網:https://studygolang.com/articles/9610
簡書:https://www.jianshu.com/p/f9024e250ac6
轉載請註明出處,本文鏈接:https://www.uj5u.com/qita/205354.html
標籤:其他
