繁体   English   中英

同时运行数千个 goroutine

[英]Running thousands of goroutines concurrently

我正在为历史交易数据开发一个模拟器 model。 我有下面的伪代码,我在其中使用了许多 goroutine。

start_day := "2015-01-01 09:15:00 "
end_day := "2015-02-01 09:15:00"
ch = make(chan float64)
var value bool

// pair_map have some int pairs like {1,2},{10,11} like approx 20k pairs which are taken
// dynamically from a range of input
for start_day.Before(end_day) {
    // a true value in ch is set at end of each func call
    go get_output(ch, start_day, pair_map)
    value <- ch
    start_day = start_date.Add(time.Hour * 24)
}

现在这里的问题是每个get_otput()大约执行。 对于每天 20k 组合(大约需要 1 分钟),在这里我尝试使用 go 例程(在单核机器上)进行一个月的时间跨度,但它所花费的时间几乎与运行时间相同依次(约 30 分钟)。

我的方法有什么问题,还是因为我使用的是单核?

我正在尝试使用go 例程(在单核机器上)进行一个月的时间跨度,但它所花费的时间与顺序运行几乎相同

什么让你认为它应该表现更好? 运行多个 goroutine 有其开销:必须管理和调度 goroutine,必须传达/收集结果。 如果你有一个单核,使用多个 gorotuine 不能提高性能,只会有损。

如果您有多个内核并且您分配的任务足够“大”,那么使用 goroutine可能会提高性能,因此 goroutine 管理将小于并行执行的增益。

请参阅相关: golang 是否适合在多线程应用程序中使用?

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM