主题:【原创】介绍一下Go语言(1)之前的话 -- zllwy
先解释一下为什么goroutine比thread要轻。goroutine是用户空间的,所以切换goroutine要比thread的花费要小。thread的初始堆栈比较大(几个MB),而goroutine初始堆栈比较小(20KB),而且是动态缩放的。所以可以同时创建比thread可以大得多的数量的goroutine。
我觉得你对channel的理解是对的。本质上通过share memory来通信使得程序引入了非确定性。两个并行的程序如何访问一块共享的内存,其执行过程是不确定的。但如果通过channel,那就很明确什么时候要通信。至于性能,不是最主要的。因为channel很可能就是利用mutex来实现的。channel是比buffer/mutex更高一层的抽象。主要的目的还是使程序逻辑本身更加清晰,减少发生错误的可能性,尽量把非确定性缩小到可控的范围(比如channel底层的实现)。有时候为了性能需要,mutex也还是可能需要用到。比如在go的mailing list讨论过goroutine的barrier的问题。如果同时生成一组goroutines,需要等他们都运行结束然后取所有的结果。这个barrier的实现可以用channel,但效率比较低。Go还没有一个好的抽象来解决这个问题。最高效的方案还是用mutex来实现。
- 相关回复 上下关系8
压缩 5 层
🙂Bingo 吹西门的雪 字997 2011-01-29 21:27:38
🙂看来我写得很烂 zllwy 字1614 2011-01-29 22:06:15
🙂写得完全不烂,但是也许可以展得更开 4 明日枯荷包 字1269 2011-01-31 07:10:26
🙂谢谢
🙂有没有接触过Lua的河友。可否简单介绍一下 1 GUNXU 字1275 2011-02-01 08:44:05
😄【商榷】我想你也没有明白我的意思 zllwy 字348 2011-01-29 11:01:18