Golang 游戏leaf系列(六) Go模块

Golang 游戏leaf系列(六) Go模块,第1张

在 Golang 游戏leaf系列(一) 概述与示例 (下文简称系列一)中,提到过Go模块用于创建能够被 Leaf 管理的 goroutine。Go模块是对golang中go提供一些额外功能。Go提供回调功能,LinearContext提供顺序调用功能。善用 goroutine 能够充分利用多核资源,Leaf 提供的 Go 机制解决了原生 goroutine 存在的一些问题:

我们来看一个例子(可以在 LeafServer 的模块的 OnInit 方法中测试):

这里的 Go 方法接收 2 个函数作为参数,第一个函数会被放置在一个新创建的 goroutine 中执行,在其执行完成之后,第二个函数会在当前 goroutine 中被执行。由此,我们可以看到变量 res 同一时刻总是只被一个 goroutine 访问,这就避免了同步机制的使用。Go 的设计使得 CPU 得到充分利用,避免 *** 作阻塞当前 goroutine,同时又无需为共享资源同步而忧心。

这里主动调用了 d.Cb(<-d.ChanCb) ,把这个回调取出来了。实际上,在skeleton.Run里会自己取这个通道

看一下源码:

New方法,会生成指定缓冲长度的ChanCb。然后调用Go方法就是先执行第一个func,然后把第二个放到Cb里。现在手动造一个例子:

这里解释一下,d.Go根据源码来看,实际也是调用了一个协程。然后上面两次d.Go并不能保证先后顺序。目前的输出结果是1+2那个先执行了,把3写入d.ChanCb,然后把3读出来,继续读时,d.ChanCb里没有东西,阻塞了。然后1+1那个协程启动了,最后又读到了2。

现在把time.Sleep(time.Second)的注释解开,会是啥结果呢

这里执行到time.Sleep睡着了,上面两个d.Go仍然是不确定顺序的,但是会各自的function先执行掉,然后陆续把cb写入d.ChanCb。看这次输出,1+2先写进去的。所以最后执行d.Cb时,就把3先读出来了。然后d.ChanCb的长度为1,说明还有一个,就是输出2了。

另外,就是close时会判断g.pendingGo

这个例子的意思很明显,NewLinearContext这种方式,即使先调用的慢了半秒,它还是会先执行完。

这里先是用了一个list,加入的时候用mutexLinearGo锁了,都加到最后。然后新开协程去处理,读的时候从最前面开始读,也要用mutexLinearGo锁。执行的时候,也要上锁mutexExecution,确保f()执行完并且写入g.ChanCb回调,这个mutexExecution锁才会解除。现在可以改造一个带回调的例子:

结果说明,确实是2先被写入了d.ChanCb。

1、mozzarella:意大利的一种淡芝士,用途广泛比较常见做披萨用的。

用水牛奶做的MOZZARELLA,产于意大利南方。MOZZARELLA还可以拌沙拉,最简单也最美味叫"CAPRESE",是以番茄和MOZZARELLA各切片一拌加上两片罗勒叶,浇上一缕特纯橄榄油即可。两样肥肥地切成片,摆上两片罗勒淋上一缕朋友的农场刚榨出来的橄榄油。MOZZARELLA还有一个变身叫SCAMORZA,也叫烟熏MOZZARELLA。比MOZZARELLA颜色更深,吃口更韧味道更重好比嫩豆腐和老豆腐。SCAMORZA最典型的吃法是切成厚片在铁板上两面烤一下,外面烤得焦黄有点脆,里面给烘的变成半流质一口咬上去又Q又香,这种做法以PUGLIA大区为上佳。还有一种吃法也是切片,夹在两片土司面包当中,裹上蛋液煎了吃,也是相当美味就是太油腻。

2、Gruyere:瑞士产味道重,全奶硬质干酪,有果仁味用蜡纸包装。

CHEESE FONDUE 瑞士火锅: 瑞士芝士火锅Swiss Cheese Fondue搭配火锅的饮料可以是白葡萄酒、白葡萄汁或是冰茶,口感以清爽为主。

瑞士的芝士火锅非常有名,在瑞士Gruyere、大孔芝士上放进芳郁的葡萄白酒Chardonnay化成原汁,依不同喜好放入蒜蓉、黑胡椒、牛奶、香草等调料。配上切成小块的面包,放到温暖着的火锅里。蘸着香浓的芝士,美妙的口感从此开始。

3、Cheddar:英国产较常见,口味柔和质地细腻。

切达干奶酪是世界上购买与消费最多的一种奶酪。最初产于英国,但是现在已经在世界上很多个国家生产了。通常切达奶酪是坚硬的天然的干酪,形状象鼓并且外层有天然的布状外壳。通常切达奶酪的颜色从白色到浅黄色不等,还有一些切达的颜色是认为加上的使之成为一种橘黄色。切达是有牛奶做成的,如果用适当的方法制作就会有着非常细微的松散组织。在它还很嫩的时候它的结构是平滑的。它的气味会随着它的成熟越来越重。奶加热到86华氏度的时候加入乳发酵剂,一小时后加入rennet(法国产的一种苹果)。当凝乳形成的时候,就会形成大理石状的小块,把它加热到100华氏度。倒出乳清,然后它们切成小块。凝乳要压一整夜,并在阴凉的地方保存4天。

4、Goat cheese:山羊芝士,营养价值很高。

顾名思义这种奶酪是由山羊奶制成。味道略带酸性,口感近似果仁而且形状比较多样化,多呈圆柱状或金字塔状。有些以核桃叶包裹可作为餐后的甜品,将之薄切于沙拉或面包上放入烤箱加热美味可口。

5、Feta cheese:希腊产一种以山羊或绵羊奶制成后,在盐水中腌熟的软芝士。

6、Ricotta: 意大利产,白色质地软,常用于冷菜。

RICOTTA虽说是奶油乳酪,但含脂量不高而且不甜也不咸。极适合做减肥食谱中的抹酱,而且奶香味十足自认为比酸奶色拉酱更胜一筹。

7、Parmesan :意大利产的硬干酪,世界著名用途广泛。

柔和的淡黄色带有金黄色至浅棕色的边,特别的硬和干燥。有一种淡淡的刺鼻子的异味,但吃起来有一股浓烈的干果香味。

帕马森乳酪那砂砂、略硬的迷人特殊口感与口中久久不散的浓郁乾果与牛奶的香气,适合磨成粉或刨成丝状加入菜肴里,成为义大利菜不可或缺的调味灵魂。帕马森乾酪的吃法非常多,可以直接吃,配水果吃,也可加在沙拉或义大利面里都十分美味。

8、Cream cheese :奶油状口感细腻味道柔和,常用于饼房和冷菜。

9、Emmentaler:这是一种世界著名的瑞士出产的奶酪。淡黄色,带有葡萄大小的空洞和金黄色至浅棕色的边。Emmentaler是一种著名的上乘奶酪,表层有许多奶酪发酵过程中由碳酸形成的气孔。干果味道,初入口淡淡的甜味随之而来的是强烈的辛辣味。Emmentaler 切片放面包上或与白葡萄同吃,切片的Emmentaler 很好吃。但硬的Emmentaler 口感不好,有一种渣渣漠漠的感觉。

10、Gouda:一种荷兰的特产奶酪,但在市场上也可见到其它国家生产的Gouda。根据成熟程度从浅黄色到金棕色、柔软到干硬不等。味道也由柔和、细腻,淡淡的辛辣,辛辣至浓烈不等。


欢迎分享,转载请注明来源:内存溢出

原文地址: http://www.outofmemory.cn/bake/11634459.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2023-05-17
下一篇 2023-05-17

发表评论

登录后才能评论

评论列表(0条)

保存