Go 语言的并发模型跟 libev libuv 之类的差别大吗?

2015-04-19 15:37:35 +08:00
 yjsslab

求科普

2820 次点击
所在节点    Go 编程语言
17 条回复
aszxqw
2015-04-19 18:01:37 +08:00
差别很大。

1. 协程是更好的高并发解决方案,无须回调函数。[谈谈并发编程中的协程](http://yanyiwu.com/work/2014/12/20/c-coroutine.html)
2. libev 和 libuv 不是很熟悉,印象中是和libevent差不多的异步解决方案,主要是回调的弊端严重。
3. go的并发就是使用协程这个解决方案。

具体可以从 fibjs 和 nodejs 的对比中就可见一斑。
aszxqw
2015-04-19 18:04:09 +08:00
再帖几个之前写的相关博文链接,楼主有兴趣可以看看

C1000K之Libevent源码分析: http://yanyiwu.com/work/2014/12/10/asyncronous-io-libevent.html
由NodeJieba谈谈Node.js异步实现: http://yanyiwu.com/work/2015/03/21/nodejs-asynchronous-insight.html
billzhuang
2015-04-19 18:53:49 +08:00
异步编程的观点是,不是cpu的操作不要占着线程,因为线程创建和切换比较重。
Go的goroutine 创建好像才2Kb空间,切换也飞速,所以不需要考虑省“线程”的问题。
hitsmaxft
2015-04-19 19:12:19 +08:00
go提供的goroutine是基于csp模型的。

libuv之类的是一个低级的异步io库,要处理并发还得在它的api之上构建一层你所谓的并发模型。
一个是语言级别的并发编程方案,一个是io库,不在一个坐标系上。

计算机科学嘛,包装几层之后就变成别的东西了。
zhicheng
2015-04-19 19:48:07 +08:00
一样的,你记住一点,用户态的任何技术,都逃不过内核提供的接口。另外,楼上的同学,没有C1000K一说,这个叫C1M。当然气势差了些。
reusFork
2015-04-19 20:00:05 +08:00
go运行时实现网络io的方法和libev / libuv是一样的。但是go程序写起来是不需要回调的,都是同步风格的代码。所以从C程序和go程序的角度看,是不一样的。
est
2015-04-19 20:12:40 +08:00
@zhicheng 已经有用户态的TCP/IP栈了。跑满网卡没问题
choury
2015-04-19 20:22:18 +08:00
@est 那也不可能直接越过操作系统操作网卡吧
missdeer
2015-04-19 20:55:03 +08:00
1楼和6楼合起来就是lz想知道的
shangjiyu
2015-04-19 21:09:46 +08:00
@zhicheng 貌似直接内置网卡驱动,绕过内核的包快速处理 kit
http://dpdk.org/
http://www.ntop.org/products/pf_ring/
https://github.com/SnabbCo/snabbswitch
clino
2015-04-19 22:04:08 +08:00
@zhicheng 去google C1M 没出来什么相关的东西,但是 C1000K 有相关结果
zhicheng
2015-04-19 22:22:47 +08:00
@esp 只用 socket 也能把网卡跑满。
我搜了C1000K,结果都是中国人的项目。你搜不到 C1M 是因为你的姿势不对,你要搜 C1M problem。
denghongcai
2015-04-19 22:28:17 +08:00
@zhicheng C1M同样也是没搜到的,Google
这样的名称本来就是看谁多占优
YouXia
2015-04-19 22:53:06 +08:00
lidashuang
2015-04-20 11:59:50 +08:00
monnand
2015-04-20 18:14:17 +08:00
@zhicheng 不是C1M,是C10。http://c10m.robertgraham.com 基本思路是在用户空间内实现协议栈,利用虚拟内存来克服内核空间内物理内存的限制
zhicheng
2015-04-20 19:20:30 +08:00
@monnand 你们开心就好。

这是一个专为移动设备优化的页面(即为了让你能够在 Google 搜索结果里秒开这个页面),如果你希望参与 V2EX 社区的讨论,你可以继续到 V2EX 上打开本讨论主题的完整版本。

https://www.v2ex.com/t/184728

V2EX 是创意工作者们的社区,是一个分享自己正在做的有趣事物、交流想法,可以遇见新朋友甚至新机会的地方。

V2EX is a community of developers, designers and creative people.

© 2021 V2EX