第七色在线视频,2021少妇久久久久久久久久,亚洲欧洲精品成人久久av18,亚洲国产精品特色大片观看完整版,孙宇晨将参加特朗普的晚宴

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

Golang 和并發(fā)/并行

Golang 和并發(fā)/并行

Go
寶慕林4294392 2021-10-18 16:59:44
我正在深入 Golang 并且有一個問題,我已經(jīng)研究了幾天,我似乎無法掌握 goroutines 的概念以及它們是如何使用的?;旧衔沂?,試圖生成數(shù)百萬條隨機記錄。我有生成隨機數(shù)據(jù)的函數(shù),并將創(chuàng)建一個包含這些數(shù)據(jù)的巨大 .CSV 文件。我的問題是是否有可能使這個并發(fā)并加快速度?我的代碼基本上是生成一個隨機字符串,將字符串寫入文件最多 N 次(其中 N 是您想要的任何內(nèi)容)。我的問題是是否可以同時執(zhí)行此操作以減少執(zhí)行時間。似乎無論我如何處理這個問題,我仍然得到相同的基準測試,就好像我沒有使用 go 例程一樣。這是我到目前為止所擁有的示例:func worker(c chan string) {        for {                c <- /* Generate random data using other functions here */        }        close(c)}func writer(s string) {        csvfile.WriteString(s)}func main(){        receive := make(chan string)    for i := 0; i < 100; i++ {        go worker(receive)    }    for i := 0; i < 10000; i++ {        go writer(<-receive)    }}在我生成數(shù)據(jù)的地方,我使用了大量來自https://github.com/Pallinder/go-randomdata的函數(shù)調(diào)用。你認為這可能是我一直在失去的地方嗎?任何幫助,將不勝感激。
查看完整描述

2 回答

?
揚帆大魚

TA貢獻1799條經(jīng)驗 獲得超9個贊

我認為您不應該在這里嘗試使用 go 例程。文件寫入幾乎總是原子的,您希望使寫入文件的機制并發(fā)......這將需要一個復雜的鎖定機制,由于寫入本身仍然是原子的,因此最終可能不會提高應用程序性能。


如果數(shù)據(jù)生成阻礙了您的程序,那么將這些工作拆分到 go 例程中并從您獲取所有數(shù)據(jù)的地方開始編寫是有意義的。但


for i := 0; i < 100; i++ {

    go worker(receive)

}


for {

    select {

    case item := <-receive:

         writer(item)

    case <-abort:

         cleanUp()

         return

    }

}

您不能在從通道接收并無休止地調(diào)用函數(shù)時循環(huán)一些 int ……但是您可以在選擇中從通道接收?;蛘咧皇峭ㄟ^這樣做item := <-recieve會阻塞,直到讀取一項。在我上面的示例中,我提供了一些偽代碼來更多地演示在這種情況下您的設計應該是什么。您需要一個中止通道,以便在您想停止應用程序時可以退出 go 例程。它可能應該完成對文件的寫入,然后在返回之前關閉它。


查看完整回答
反對 回復 2021-10-18
?
智慧大石

TA貢獻1946條經(jīng)驗 獲得超3個贊

嘗試緩沖您的頻道

receive := make(chan string, 1000)

寫入速度受您的磁盤限制,因此您只能通過并發(fā)寫入來提供幫助,而從您所說的并發(fā)生成數(shù)據(jù)來看,它也無濟于事。

并發(fā)不是解決任何緩慢問題的方法,要么接受您處于極限狀態(tài),要么進行優(yōu)化。


查看完整回答
反對 回復 2021-10-18
  • 2 回答
  • 0 關注
  • 203 瀏覽
慕課專欄
更多

添加回答

舉報

0/150
提交
取消
微信客服

購課補貼
聯(lián)系客服咨詢優(yōu)惠詳情

幫助反饋 APP下載

慕課網(wǎng)APP
您的移動學習伙伴

公眾號

掃描二維碼
關注慕課網(wǎng)微信公眾號