一个关于goroutine的问题
来源:10-1 goroutine

霜见
2020-06-04
比如我想做一个计算器,把计算过程放在goroutine里,因为goroutine是乱序执行的我应该如何区分某个计算结果应该是哪次请求的呢?
举个例子,比如有两个用户a和b,a先请求但是计算非常复杂,b后请求但是计算简单,用goroutine的时候b的计算先算出了结果,channel先返回了b的结果,那我怎么知道这个返回的结果是a还是b的结果呢
写回答
1回答
-
这有很多种做法,简单的来说,channel和goroutine在go语言中,都不是“贵”的东西,我们可以为两个计算分别开一个channel,各自收各自的结果。不过这样有可能最终显示结果的时候也不是太容易,还是需要把channel映射到计算请求上去。
如果用一个channel的话,就要把计算请求加个id,把它们区分出来。比如:
type calcTask struct {
id int
result int
}
ch := make(chan calcTask)
我们在main里面维护一个id到计算任务的映射,就可以把结果映射到相应的计算任务上。
062020-08-02
相似问题
对于通道的理解有点绕
回答 1
老师你好,goroutine的问题
回答 3