老師的代碼有錯誤的地方
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