为什么要使用线程池?

liuzu2016 2012-09-11 08:13:04

问题1:为什么要使用线程池, 有人马上会说,因为创建线程太耗时间了,

可是有人又说了,你创建太多,来回切换,也费时间。


尤其是windows网络编程一本书提到的,不要太多线程,一般般是cpu*2的个数即可。

有几个cpu,一般人的机子就2个而已, 就4个线程,搞那么复杂的线程池,想不通,

为什么要创建?


问题2:



举三个来自网上的例子:


1. 堵塞套接字,不用任何模型的socket编程:
对于长连接而言, 客户端随时都得和服务端保持连接!!! 如果一个客户端1个线程,

几十个客户端就得有几十个线程了, cpu来回切换,貌似几十个线程都在同时运行着。产生假象。

2. iocp+工作线程的方式
我的机子是2cpu, 我就创建4个工作线程把,来进行接收发送数据,用全局map管理在线用户!!

这个也是对付几十个客户端

3. 采用iocp 加上自己的线程池




3者哪一个效率高?


问题3:

还有,既然iocp已经有了线程池了,为什么还有人要写线程池和iocp一块用呢?不多于嘛?


3个问题,我都搜索过了,还真没有什么好的解答。

...全文
317 4 打赏 收藏 转发到动态 举报
写回复
用AI写文章
4 条回复
切换为时间正序
请发表友善的回复…
发表回复
Jinhao 2012-09-13
  • 打赏
  • 举报
回复
1,关于线程池
第一点,你不用关心对线程的管理,可以轻松做到异步处理.第二点.线程切换是避免不到.但可以减少频繁的线程创建和销毁动作.如果仅需要一两条从开始到结束的线程,那大可不必使用线程池

第二个问题跳过,直接第三问.
iocp外加线程池可以让iocp内部的线程池空闲出来仅接受网络请求,增加网络响应的能力.外加的线程池用于处理业务.在有大量的网络请求的时候效果更为明显
liuzu2016 2012-09-12
  • 打赏
  • 举报
回复
系统帮我管理,他怎么管理的,说来听听,

如果不帮我,我有得如何管理?

还有iocp和工作线程 是否构成 你说的所谓“线程池”?

wapjia43106140 2012-09-12
  • 打赏
  • 举报
回复
既然iocp已经有了线程池了?? IOCP自己没有线程池.他只是一种机制,一种事件模型的机制,系统帮你管理你的线程池.你得用线程池来处理.
liuzu2016 2012-09-11
  • 打赏
  • 举报
回复
up起来,

为什么啊

15,979

社区成员

发帖
与我相关
我的任务
社区描述
VC/MFC 界面
社区管理员
  • 界面
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧