多线程的创建数目

首先,为什么要使用多线程?
使用多线程为了提高对硬件的利用率。提高程序的性能。那么理性的认识,从哪些指标来看。一个是延迟一个是吞吐量
延迟就是指发出请求到收到请求的这个过程的时间,延迟越短,请求响应的速度越快,性能就越好。
吞吐量就是单位时间内处理请求的数量,吞吐量越大,单位时间内处理的请求数越多,性能越好。
为了使用多线程提升性能,为的就是达到低延迟,高吞吐量。

为什么要提高降低延迟,提高吞吐量?
为了降低延迟,提高吞吐量,大牛提出了2个方向,**一个是优化算法,第二个是提高对硬件利用率的极致。**而前者是算法领域,后者的实现就是并发编程领域。
而对并发编程影响的硬件的2个大件是,一个是io,一个是cpu.
总的来说,为了提高对硬件的利用率,就是提升 I/O 的利用率和 CPU 的利用率。虽然引入一些中断机制,什么处理机等等来处理cpu与io外设的一些问题,但是cpu和io外设的综合利用率的问题还没解决,这部分的解决办法就是多线程。

怎么提高cpu和io外设的利用率呢?答案就是使用多线程。那么怎么去设置多线程的创建数目呢?
首先从单核cpu开始,由于cpu只有只有一个,如果cpu单独计算过程中,程序去执行io操作,那么cpu就空闲下来了,那么为了提高对cpu的利用率,于是使用多线程,那么当线程a放弃cpu时,去执行io操作时,线程b能使用cpu,这样cpu的利用率就不会降低了。

那么多核cpu呢,能降低延迟,提高响应。比如要计算 1+2+… … +100 亿的值,线程a去计算[1+…25亿],线程b去计算[25,50亿],线程c计算[50,75亿]。线程d去计算[75.100亿],那么4个线程可以同时运行,如果用一个线程去计算1+2+… … +100 亿的值。那么效率就比上面的低太多,上面的速度就提高了4倍。时间为一个线程去计算的25%.

于是,大牛就提出了线程创建数目的公式:分为cpu密集型和io密集型。
首先对于cpu密集型,多线程的本质是提高对cpu的利用率。那么在cpu密集型下,有多少个核那么就创建多少个线程,但是,在工程上,线程数目 = cpu核数+1为什么多一个,因为偶尔的内存页失效或者其他原因导致阻塞时,这个额外的线程可以顶上,从而保证 CPU 的利用率。

对于io密集型呢?最佳线程数 =1 +(I/O 耗时 / CPU 耗时)这是单核上io密集型。
于是
多核最佳线程数 =CPU 核数 * [ 1 +(I/O 耗时 / CPU 耗时)]
,为什么原因:
在这里插入图片描述
在单核上,cpu耗时:io耗时=1:2时,那么推出最佳线程数 =1 +(I/O 耗时 / CPU 耗时)

怎么检测io耗时和cpu耗时呢?推荐apm工具

  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值