偶尔看见一个不错的协程池实现叫做 ants,觉得不错,但是官方例子有些冗余,所以自己写了个超简单的应用场景。
如果想要了解实现原理的可以点击【这里】,原作者已经写得很清楚了。
栗子
场景是–我们要处决僵尸,但是只有3把电椅。
当然,最主要的还是要有僵尸给我们盘,所以我们有两个方法:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 |
var tunnel = make(chan string, 1) // 僵尸隧道 // 处决僵尸 func ExecuteZombie(i interface{}) { fmt.Printf("正在处决僵尸 %s 号,还有5秒钟....\n", i.(string)) time.Sleep(5*time.Second) fmt.Printf(":) %s 玩完了,下一个\n-----------------\n", i.(string)) } // 欢迎僵尸 func IncomingZombie() { for i := 0; i < 10; i++ { tunnel <- strconv.Itoa(i) } } |
这一波大概会来10个左右的僵尸。
处理一个僵尸大概5秒钟。我们准备了三把电椅:
1 2 3 4 5 6 7 8 9 10 11 12 13 |