問題:
考慮給定的Go 代碼片段:
<code class="go">package main import ( "fmt" "math/rand" "time" ) func main() { for i := 0; i < 3; i++ { go f(i) } // prevent main from exiting immediately var input string fmt.Scanln(&input) } func f(n int) { for i := 0; i < 10; i++ { dowork(n, i) amt := time.Duration(rand.Intn(250)) time.Sleep(time.Millisecond * amt) } } func dowork(goroutine, loopindex int) { // simulate work time.Sleep(time.Second * time.Duration(5)) fmt.Printf("gr[%d]: i=%d\n", goroutine, loopindex) }</code>
問題:
答案:
關於GOMAXPROCS:
根據Go 1.5 發行說明:
根據Go 1.5 發行說明:「預設情況下,Go 程式執行GOMAXPROCS 設定為可用核心數;在先前的版本中預設為1。」
關於防止主函數退出:防止「main」函數退出立即退出,可以使用「WaitGroup」類型,特別是「Wait」
關於並行性:<code class="go">import "sync" // Parallelize executes functions concurrently func Parallelize(functions ...func()) { var waitGroup sync.WaitGroup waitGroup.Add(len(functions)) defer waitGroup.Wait() for _, function := range functions { go func(f func()) { defer waitGroup.Done() f() }(function) } }</code>為了促進函數組的並行處理,可以使用輔助函數:
<code class="go">func1 := func() { f(0) } func2 = func() { f(1) } func3 = func() { f(2) } Parallelize(func1, func2, func3)</code>在您的情況下,可以透過以下方式實現並行性:
以上是使用 go f(i) 是在 Go 中實現並行性的最佳方式嗎?的詳細內容。更多資訊請關注PHP中文網其他相關文章!