线程池中创建多少线程合适

通俗一点,如何让你的系统处理更快,(降低延迟,提高吞吐量)。

对应方法进本两个方向,一个算法,另一个将硬件性能发挥极致。 提升性能就是,提升硬件的利用率。

也就是提升i/o的利用率和cpu的利用率。

你线程池的创建线程条数直接影响你系统的性能。

 

思考问题一,分工产生效能 

在单核cpu时代,假如你用多线程的话,主要就是用来平衡cpu和I/O设备,如果你的程序只设计cpu计算,没有I/O操作的话,多线程不但不会提升性能,还会是性能变的更差,原因就是线程的切换成本。

我给你举个例子,你公司就你一个员工,老板让你一会写代码,一会打扫卫生,还顺带着帮老板拿个快递。

这样会造成什么,切换成本。马克思说分工产生效能就是这么理解的。

在多核cpu时代,即使只进行cpu计算, 多线程也可以提高性能了,就好比一个公司来了四个员工(四核cpu),这样可以分别拿快递,打扫卫生,写代码等工作了。

 

那么创建多少条线程合适?

这里先要理解你的系统是cpu密集型(大部分都是纯cpu计算),还是I/O密集型(大部分都是I/O操作),因为cpu执行时间显然要比I/O操作要快。

cpu密集型:这里没啥好说的,因为本质就是cpu计算,线程数等于cpu核数,为什么呢你想,你公司现在4个员工,这四个员工都有自己工作,2个员工写代码,一个拿快递,一个打扫卫生,这样各干个的,你非要让那个打扫卫生的员工给你去买烟,这样就造成了这个员工的切换成本了(4核cpu开了5条线程)。也就是说你创建线程月多,切换成本越大。

注意:这里我只是比喻一下,为了你好理解,正常工程上,创建的线程数=cpu核数+1,为了就是偶尔的内存页失效,或者阻塞时候,这个额外的线程可以顶上,从而保证cpu的利用率(比如做保洁的员工在给你买烟的路上出了啥问题。其他的员工可以顶上,目的就是为了让你顺利的抽上烟)。

I/O密集型的计算场景,I/O操作耗时和cpu耗时比值非常关键,但是这个比值是动态的具体可以借助一些工具测试。

计算公式为  最佳线程数 =cpu 核数*(1+(I/O耗时/cpu耗时))。 可以理解为 一个线程执行完I/O操作之后,(I/O耗时/cpu耗时)个线程完成了各自的cpu计算 ,这样cpu利用率达到100%(纯理论上的)

 

 

 

 

 

  • 1
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值