亚洲在线久爱草,狠狠天天香蕉网,天天搞日日干久草,伊人亚洲日本欧美

為了賬號安全,請及時綁定郵箱和手機立即綁定
已解決430363個問題,去搜搜看,總會有你想問的

Go 例程與任務并行庫的實現

Go 例程與任務并行庫的實現

Go
小怪獸愛吃肉 2023-03-21 17:07:29
我剛開始學習圍棋。Go 的優勢在于用于處理多個并發連接的 goroutines。有人提到Goroutines 可以被認為是輕量級線程(但實際上不是線程),它們可以增加/縮小堆棧大小,并且它們被多路復用到多個 os 線程中。假設您有 1000 個 goroutine,那么這些 goroutine 將根據 goroutine 的阻塞和等待模式調度到本機操作系統線程?;旧希襾碜?C# 和 Nodejs 背景。我很困惑它與用 C# 實現的 TaskParallelLibrary 有何不同。TaskParallelLibrary 隱藏了創建線程和管理它們的復雜性。您只需啟動一個任務,CLR 就會負責將它們映射到本機線程。在這里,您可以創建數以千計的小任務,這些任務被映射和調度到 OS 線程。但是 TPL 專門解決異步問題。我的問題是 TPL 與 goroutines 有何不同?goroutines 是否使用協程(可暫停函數或?)。TPL 還將異步/系統調用操作多路復用到線程池,甚至 Go 也將系統調用多路復用到線程池。如果我的任何假設是錯誤的,請糾正我。任何人都可以幫助我具體實施的不同之處嗎?為什么 goroutines 聲稱比 TPL 更快?
查看完整描述

1 回答

?
翻閱古今

TA貢獻1780條經驗 獲得超5個贊

主要區別在于 Go 運行時將 goroutine 的調度與 I/O 緊密耦合,基本上是這樣工作的:如果 goroutine 將要阻塞某些 I/O 操作或通道操作,調度程序會掛起該 goroutine 并重新一旦知道原來的 I/O 或通道操作現在可以繼續,就會激活它。這允許以純順序的方式編寫 Go 代碼——沒有所有的回調地獄和“未來”/“承諾”kludges,它們只是將回調包裝到對象中,也沒有 / 機制,這再次只是將編譯器技巧與普通操作系統線程結合async起來await。

Dart 編程語言的一位開發人員在這篇經典文章中很好地解釋了這些東西。

另見thisthis。


查看完整回答
反對 回復 2023-03-21
  • 1 回答
  • 0 關注
  • 85 瀏覽
慕課專欄
更多

添加回答

舉報

0/150
提交
取消
微信客服

購課補貼
聯系客服咨詢優惠詳情

幫助反饋 APP下載

慕課網APP
您的移動學習伙伴

公眾號

掃描二維碼
關注慕課網微信公眾號