關於golang併發程式設計的問題,運用chan反而比較慢是為什麼呢?

時間 2021-05-07 03:10:00

1樓:Micheal睿

首先,在沒有明確你的具體測試用例是如何編寫的時候,不能潦草地下定結論說通道通訊比加鎖要慢。如果可以,希望提問者給出一下具體的測試用例,讓我們好具體分析原因。

其次,chan底層其實也是使用了加鎖的機制來實現通訊的(注意緩衝區大於0的chan在讀取和寫入資料的時候才會加鎖,若是不帶緩衝的chan,則是不會加鎖的即效率是最高的,但是會出現阻塞情況)

我說一下可能的原因吧:chan的通訊具體是由go執行時來控制的,若有很多個goroutine在競爭同乙個chan的鎖的時候,當然可能會導致鎖競爭耗時太多從而表現為通道通訊比使用傳統的鎖要慢

2樓:吳俊

看了你的鏈結(有些人沒看就開答了。。。)

沒測試過,但你的結論有可能是對的。

過早的優化是萬惡之源。

如果是我,首先想到的是用讀寫鎖,或者是sync.Map,簡單,而且效率也不見得低。

3樓:廖志

1。你所說的併發程式設計,具體解決什麼問題,可以說清楚點

2。併發並不是用了就快,是要用正確才會快

掌握golang併發程式設計相當於 C語言裡理解並掌握指標,沒有正確理解和掌握GOLANG的chan,就說明還需要學習

請問大佬關於網路程式設計的問題

Jack Yan 網路程式設計那就要先理解網路的七層模型,這個模型其實就是個規範,為了計算機之間可以互聯通訊,早期沒有這個規範,計算機之間是不能互相通訊的。劃分層次的目的,就是在邏輯上,把負責不同功能的軟硬體分開研發。網路程式設計裡面,主要理解網路層,傳輸層,還有應用層的軟硬體工作原理和實現。有了規...

關於ACM中的程式設計演算法問題 ?

int rampNum int a,int n int s 0 a 0 0 for int i 1 i n i for int j a i 1 j bhuztez的思路,寫出了c 版本的,這裡假設陣列中下標為1的元素為最高位以方便處理,combinationNum為計算組合數的函式。 inspire...

怎麼把C 的併發程式設計玩出花來?

想要花就需要你自己搞一套庫,設計一套與眾不同的風格,不過再花不也不可能比executors更花 timed single thread context context 乙個支援定時器的執行緒 auto scheduler context.get scheduler std atomic count ...