日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

.net httpwebrequest 并发慢_go语言并发之MPG模型

發布時間:2023/12/2 编程问答 42 豆豆
生活随笔 收集整理的這篇文章主要介紹了 .net httpwebrequest 并发慢_go语言并发之MPG模型 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.
請記住go并發的真理:Do not communicate by sharing memory; instead, share memory by communicating.
不要以共享內存的方式來通信,相反,要通過通信來共享內存。

go語言天生的并發大家都知道,可是go是如何實現輕松的構造上萬的協程呢?今天我們就說一下go并發的MPG模型。

后續會有更多的模式和算法以及區塊鏈相關的,如果你是想學習go語言或者是對設計模式或者算法感興趣亦或是區塊鏈開發工作者,都可以關注一下。(微信公眾號:Go語言之美,更多go語言知識信息等)。公眾號會持續為大家分享更多干貨。
  • M 代表著一個內核線程,也可以稱為一個工作線程。goroutine就是跑在M之上的
  • P 代表著(Processor)處理器 它的主要用途就是用來執行goroutine的,一個P代表執行一個Go代碼片段的基礎(可以理解為上下文環境),所以它也維護了一個可運行的goroutine隊列,和自由的goroutine隊列,里面存儲了所有需要它來執行的goroutine。
  • G 代表著goroutine 實際的數據結構(就是你封裝的那個方法),并維護者goroutine 需要的棧、程序計數器以及它所在的M等信息。
  • Seched 代表著一個調度器 它維護有存儲空閑的M隊列和空閑的P隊列,可運行的G隊列,自由的G隊列以及調度器的一些狀態信息等。
  • 多個goroutine并發合作

    上面這個圖生動的說明多個協程工作形式,其中每一個gopher(土撥鼠)可以看作一個協程(G),其實對于這些gopher,還有一個包工頭的gopher,他來管理這些工作的gopher,這個包工頭就可以看作一個 Seched。

    MPG

    我們在看上面這個圖,圖中P正在執行的Goroutine為藍色的,處于待執行狀態的Goroutine為灰色的,灰色的Goroutine形成了一個隊列runqueues。

    我們再看一下三者的宏觀圖:

    MPG宏觀圖

    在這里,當一個P關聯多個G時,就會處理G的執行順序,就是并發,當一個P在執行一個協程工作時,其他的會在等待,當正在執行的協程遇到阻塞情況,例如IO操作等,go的處理器就會去執行其他的協程,因為對于類似IO的操作,處理器不知道你需要多久才能執行結束,所以他不回去等你執行完。

    上面我們看著go的并發好像是搶占式的,事實上go的協程是非搶占式的,由協程主動交出控制權,也就是說,上面在發生IO操作時,并不是調度器強制切換執行其他的協程,而是當前協程交出了控制權,調度器才去執行其他協程。我們列舉一下goroutine可能切換的點:

    • I/O,select
    • channel
    • 等待鎖
    • runtime.Gosched()

    這些點是go協程可能切換的地方,但是并不是一定切換的。

    正是因為是非搶占式的,所以才輕松的構造上萬的協程,如果是搶占式,那么就會在切換任務時,保存當前的上下文環境,因為當前線程如果正在做一件事,做到一半,我們就強制停止,這時我們就必須多保存很多信息,避免再次切換回來時任務出錯。

    線程是操作系統層面的多任務,而go的協程屬于編譯器層面的多任務,go有自己的調度器來調度。一個協程在哪個線程上是不確定的,這個是由調度器來決定的,多個協程可能在一個或多個線程上運行。

    go的并發是很重要的,這里只是簡單說一下MPG模型的個人理解,如果大家有不同意見,可以一起討論學習,三人行必有我師。如果覺得這篇文章不錯可以轉發(微信公眾號/今日頭條:Go語言之美,更多go語言知識信息等)。

    創作挑戰賽新人創作獎勵來咯,堅持創作打卡瓜分現金大獎

    總結

    以上是生活随笔為你收集整理的.net httpwebrequest 并发慢_go语言并发之MPG模型的全部內容,希望文章能夠幫你解決所遇到的問題。

    如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。