首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >高亮并行处理

高亮并行处理
EN

Stack Overflow用户
提问于 2014-08-03 16:06:50
回答 5查看 54.1K关注 0票数 16

考虑到以下代码:

代码语言:javascript
复制
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)
}

我是否可以假设“dowork”函数将并行执行?

这是一种实现并行的正确方法,还是更好地为每条河流使用通道和独立的“dowork”工作?

EN

回答 5

Stack Overflow用户

回答已采纳

发布于 2014-08-03 16:26:11

这个答案已经过时了。请改用 this answer .

您的代码将同时运行,但不会并行运行。您可以通过设置GOMAXPROCS使其并行运行。

这里还不清楚您想要实现什么,但在我看来,这是实现并发性的一种非常有效的方法。

票数 22
EN

Stack Overflow用户

发布于 2017-06-07 03:32:29

关于GOMAXPROCS,您可以在Go 1.5的发行版文档中找到这一点:

默认情况下,GOMAXPROCS将运行的Go程序设置为可用的核数;在以前的版本中,它默认为1。

关于防止main函数立即退出,您可以利用WaitGroupWait函数。

我编写了这个实用程序函数来帮助并行化一组函数:

代码语言:javascript
复制
import "sync"

// Parallelize parallelizes the function calls
func Parallelize(functions ...func()) {
    var waitGroup sync.WaitGroup
    waitGroup.Add(len(functions))

    defer waitGroup.Wait()

    for _, function := range functions {
        go func(copy func()) {
            defer waitGroup.Done()
            copy()
        }(function)
    }
}

所以在你的情况下,我们可以这么做

代码语言:javascript
复制
func1 := func() {
    f(0)
}

func2 = func() {
    f(1)
}

func3 = func() {
    f(2)
}

Parallelize(func1, func2, func3)

如果您想使用并行化函数,您可以在这里找到它-- https://github.com/shomali11/util

票数 27
EN

Stack Overflow用户

发布于 2017-06-04 13:23:18

f()将同时执行,但许多dowork()将在每个f()中依次执行。等待stdin也不是确保例程完成执行的正确方法。当f()完成时,您必须旋转一个通道,每个true都可以推入一个f()。在main()的末尾,你必须等待通道上的true的n个数。n是你旋转出来的f()的数目。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/25106526

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档