46fo
V2EX  ›  问与答

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

By 46fo at 2014 年 1 月 13 日 · 7723 次点击
谁用过libuv的?我发现 echo的例子是单线程的!但是win版 libuv里不是调用的是 win的完成端口吗? 单线程能发挥优势吗? 官方 和网上的我找不到多线程的例子! 求各位大神指教
7 条回复  •  1970-01-01 08:00:00 +08:00
nybux
   1
nybux  
   2014 年 1 月 13 日   ❤️ 1
仅仅是echo的话,单线程就够了。
如果有复杂计算的话,用uv_queue_work将工作提交到线程池
46fo
   2
46fo  
OP
   2014 年 1 月 13 日
@nybux 能再详细点么 T0T
nybux
   3
nybux  
   2014 年 1 月 13 日   ❤️ 1
反射这种没有计算量的处理工作,一个cpu核心就能够完全搞定网卡。所以单线程就可以了。
多线程的话,各种程序框架有各种不同的模型,libuv用的是线程池。用uv_queue_work将工作提交到一个线程池里面去执行,处理完成后,会触发主线程的回调函数
46fo
   4
46fo  
OP
   2014 年 1 月 13 日
@nybux 有计算量的

是在 on_connection 里 uv_accept 完成后 的处理交到uv_queue_work吗?
nybux
   5
nybux  
   2014 年 1 月 13 日
要看你的协议了,如果你还要等待对方有数据过来后才处理的话,那要在after_read里面将工作传递到线程池
haohaolee
   6
haohaolee  
   2014 年 1 月 13 日
IO密集的单线程(或者和CPU数量相当的少量线程)就可以了,完成端口,epoll,kqueue都是这样
46fo
   7
46fo  
OP
   2014 年 1 月 13 日
@haohaolee 有可能会阻塞的呢?
© 2026 V2EX · 38ms · 3.9.8.5