老师的代码有错误的地方
func A() {
...
go func(task []int, i int) {
...
}(task, i) // i 需要从外部传进去
}
func B 和 func C 中 break 无法跳出循环,可以使用 goto 或者 标记flag 跳出外层 for 循环
func A() {
...
go func(task []int, i int) {
...
}(task, i) // i 需要从外部传进去
}
func B 和 func C 中 break 无法跳出循环,可以使用 goto 或者 标记flag 跳出外层 for 循环
2020-08-08
@我魔我能,同学,你还是往后看一下第三章的内容。。。。。人家举的例子是一个笼蒸10个包子代表一个协程处理一个任务。。。。。10个包子=1个任务,不是10个任务。。。。你理解错了
2020-07-10
举例不当,一个包子出笼需要,做包子,包子放入蒸笼,出笼给客户,这三步才能完成。这时来个客户要买10个包子,单协程是这样做的:做1包子1分钟,把1个包子放入蒸笼,蒸10分钟,出笼给客户,然后继续做第二个,第三个,这样客户就要等待110分钟。而多协程是这样的:把做包子比做一个任务,那现在有10个任务,第一个任务开始:做1包子,把1个包子放入蒸笼,等待蒸好,这时第一个任务陷入等待,厨师可以去做第二个任务,做第2个包子,把第二个包子放入蒸笼,等待第二个蒸好,好第二个任务又陷入等待了。厨师开始做第3个任务,。。。这样客户的等待时间就是蒸一个包子的时间+做10个包子的时间——1*10+10=20分钟
2020-07-09
课程的PPT的还做的不错,至于讲的嘛,就~。如果你只是来学一下go语言的协程语法,那么你会有收获;如果你初学者想了解一下go协程,那么很有可能会误导你。
课程中例子选的不错,但讲法错了。单协程就是一个笼子每次蒸1个包子,多协程就是1个笼子一次蒸10个???协程序是提供了程序的并发能力,不是并行能力!协程本质是让程序员用同步、阻塞的编码,利用go的协程调度,提高cpu利用率,实现一个高并发服务。
课程中例子选的不错,但讲法错了。单协程就是一个笼子每次蒸1个包子,多协程就是1个笼子一次蒸10个???协程序是提供了程序的并发能力,不是并行能力!协程本质是让程序员用同步、阻塞的编码,利用go的协程调度,提高cpu利用率,实现一个高并发服务。
2020-07-09