主题:【原创】介绍一下Go语言(1)之前的话 -- zllwy
你写的这些关于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通信的优点。
- 相关回复 上下关系8
压缩 5 层
🙂Haskell zllwy 字324 2011-01-29 11:53:51
🙂Bingo 吹西门的雪 字997 2011-01-29 21:27:38
🙂看来我写得很烂 zllwy 字1614 2011-01-29 22:06:15
🙂写得完全不烂,但是也许可以展得更开
🙂谢谢 1 zllwy 字929 2011-02-01 14:22:35
🙂有没有接触过Lua的河友。可否简单介绍一下 1 GUNXU 字1275 2011-02-01 08:44:05
😄【商榷】我想你也没有明白我的意思 zllwy 字348 2011-01-29 11:01:18
🙂这么说就没劲了 pastebt 字88 2011-01-29 20:00:25