西西河

主题:【原创】介绍一下Go语言(1)之前的话 -- zllwy

共:💬92 🌺231
全看分页树展 · 主题 跟帖
家园 写得完全不烂,但是也许可以展得更开

你写的这些关于Go的帖子我很感兴趣,都认真看了,我还跑网上找了一些教程等看,还顺便看了看Lua的资料。就象吹西门的雪兄说的,Go的让我最感兴趣的地方是goroutine(另一个是duck typing和对继承的处理)。引起我的兴趣,这个目的你的确是达到了,但是你的第4部分里写的,让我这个对这方面不熟悉的人,感到心痒痒,但是又有没有搔到痒的感觉,不太好受。主要就是术语比较多,但是缺少解释,也许有基础的朋友看了没问题,但是对我来说却是有点懵。所以希望能进一步讲讲这方面的内容。

有两个问题想请教一下:为什么goroutine能比线程轻得多?通过channel来通信为什么比通过内存分享来通信要可靠?

对后一个问题我的理解是,通过内存分享来通信,得时时刻刻注意着race condition的问题,因为这有可能在程序的任何一点发生,编译器的优化使得理解和控制race condition更为困难。但事实上同一个程序中那些并行的部分并不需要这样时时刻刻保持通信的状态,它们之间是合作的,只需要在大家都知道的特定的点为特定的目的而通信,所以channel就大大简化了这种状况。还有比如java中,即便两个methods都是synchronized,如果顺次呼叫这两个methods,有可能还是得在放在一个synchronized的块里,也就是说java的synchronized机制是局部(不知应该用什么词)的。而channel的通信却天生是全局的,一个message只可能给收听这个channel的若干goroutines中的一个,于是在一个goroutine里面完全不用考虑其他并行的goroutine的影响。但我不知道是不是还有其他的用channel通信的优点。

全看分页树展 · 主题 跟帖


有趣有益,互惠互利;开阔视野,博采众长。
虚拟的网络,真实的人。天南地北客,相逢皆朋友

Copyright © cchere 西西河