续上篇 Day 15 读 Go Concurrency Patterns - Rob Pike II
传话游戏就是将原有的讯息,从第一个人透过肢体动作传给下一个人,直到传到最後一个人,并且由最後一个人猜原本的讯息到底是什麽。
接下来用 goroutine 和 channel 模拟这个传递的过程吧。
来解读一下程序:
f
函式,把右边的讯息 +1 传给左边代表着传话游戏渐渐失真的讯息左到右
把每个 goroutine 的 channel 连接好仔细看,这里竟然开了一万个 goroutine,执行速度还是很快,这章投影片同时想表达的是 goroutine 是很轻量的
Rob Pike 在这时表示,到现在为止做的程序都太玩具了。 Go 是用来设计系统程序的,我们来做一个简单的 google search engine 吧
先想想 google search 做了什麽:
先做出一个假的 fakeSearch 的框架,并且用它来产生各种假的搜寻,包括 Web、Image、Video
版本一,依序执行,搜寻 Web、搜寻 Image、搜寻 Video,最後再组起来
版本二,用三个 goroutine 执行,再把结果组起来。
注意:这支程序透过 channel 工具,并没用到传统的 mutex, conditional variable
仔细想想版本二会有一个问题,总执行时间会是搜寻最慢的那个 goroutine 的执行时间,若是一个 server 回传的速度非常慢,就会造成总执行时间被拖慢
版本 2.1
注意:这程序有一个问题,如果这个搜寻很久的结果回传之後呢,因为接收端的 channel 没有人接收了,这个 goroutine 发送时就被 block ,直到程序结束,造成 goroutine leak,Rob Pike 可能写投影片时没注意到,到最後我们再看看怎麽修正吧
十二点又到啦,休息,明日继续。
打破规则的五个特质,到底是会把事情弄乱?还是会让你探索事情的全貌? 「很羡慕你那种没有犯错的日子,能...
关於地板 地板的部分,也关系到了墙壁以及布线难易度,往往很多公司在装潢完成之後,才发现东缺西缺,到之...
本篇内容来自於我在Medium上写的一篇文章:Swift 语法再读#1 [Between Struc...
import pandas as pd from sklearn.preprocessing imp...
当我们有很多重复的架构,内容却不一样,以旧有无框架的开发,我们可能就需要手动一笔一笔的刻出来,更进步...