谁用过libuv的?echo的例子是单线程的!怎样多线程?求各位大神指教

2014-01-13 15:39:37 +08:00
 xdeng
谁用过libuv的?我发现 echo的例子是单线程的!但是win版 libuv里不是调用的是 win的完成端口吗? 单线程能发挥优势吗? 官方 和网上的我找不到多线程的例子! 求各位大神指教
6922 次点击
所在节点    问与答
7 条回复
nybux
2014-01-13 16:03:56 +08:00
仅仅是echo的话,单线程就够了。
如果有复杂计算的话,用uv_queue_work将工作提交到线程池
xdeng
2014-01-13 16:25:21 +08:00
@nybux 能再详细点么 T0T
nybux
2014-01-13 16:27:19 +08:00
反射这种没有计算量的处理工作,一个cpu核心就能够完全搞定网卡。所以单线程就可以了。
多线程的话,各种程序框架有各种不同的模型,libuv用的是线程池。用uv_queue_work将工作提交到一个线程池里面去执行,处理完成后,会触发主线程的回调函数
xdeng
2014-01-13 16:35:51 +08:00
@nybux 有计算量的

是在 on_connection 里 uv_accept 完成后 的处理交到uv_queue_work吗?
nybux
2014-01-13 16:40:28 +08:00
要看你的协议了,如果你还要等待对方有数据过来后才处理的话,那要在after_read里面将工作传递到线程池
haohaolee
2014-01-13 17:03:36 +08:00
IO密集的单线程(或者和CPU数量相当的少量线程)就可以了,完成端口,epoll,kqueue都是这样
xdeng
2014-01-13 17:08:03 +08:00
@haohaolee 有可能会阻塞的呢?

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

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

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

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

© 2021 V2EX