线程数,设置多少更合适

  1. 简介
    线程数的设置的最主要的目的是为了充分并合理地使用 CPU 和内存等资源,从而最大限度地提高程序的性能。
  2. 使用多线程的目的
    假设服务器有1个线程处理用户一个请求的时间为100ms,这一个请求又分为3个互不影响的串行逻辑,处理时间为30ms、30ms和40ms,则在1s内只能处理10个请求,这意味着其他请求只能等待,这样当用户访问量非常大的时候,就会造成大量用户等待,体验很差。
    假设服务器开10个线程处理用户请求,这个时候1s就可以处理100个请求,体验稍好一些。
    假设用3个不同的线程去并行去处理这一个请求中的3个互不影响的逻辑,这样整个请求的处理时间就由100ms降为了40~50ms(还要考虑线程切换的耗时,这里只是假设),这时1s就可以处理100*(2~2.5)个请求。
    这就是多线程的好处。

  3. 多线程数量设置
    一个任务可以按照这个任务主要处理的内部逻辑分为IO密集型任务和计算密集型任务。

  4. IO密集型任务
    IO密集型任务即主要处理的为IO操作,比如文件读写、网络通信, MySQL 数据库等任务,这类任务不会特别消耗 CPU 资源,但是 IO 操作比较耗时,会占用比较多时间。这种情况下如果没有使用多线程来处理IO密集型任务,CPU就会傻傻的等待在那里,极大浪费CPU资源,因此需设置多线程来最大化利用CPU资源

  5. IO密集型任务设置多少线程合适?
    IO密集型任务占用CPU资源很少,假设一个应用里面全是IO密集型任务,则线程数=(CPU内核数)/(1-阻塞系数),其中阻塞系数一般为0.8~0.9(IO密集型任务占用CPU资源很少,假设一个应用里面全是IO密集型任务,则线程数=(CPU内核数)/(1-阻塞系数),其中阻塞系数一般为0.8~0.9)。

  6. 计算密集型任务
    计算密集型任务即应用中处理的是算法计算等,这种任务主要通过CPU来完成,因此占用CPU资源比较多。
    比如像加解密,压缩、计算等一系列需要大量耗费 CPU 资源的任务,大部分场景下都是纯 CPU 计算

  7. 计算密集型任务设置多少线程合适?
    计算密集型任务因占用CPU资源比较多,因此为了最大化利用CPU资源,一般设置线程数=CPU内核数*2

  8. 混合型任务线程数量的设置
    混合型任务即包含计算操作也包含IO操作,假设整个任务处理时间为100ms,计算操作占用时间为20ms,IO操作占用时间为80ms,也就是说CPU只有大约五分之一在被占用,其他五分之四被浪费掉,这个时候需要启动的线程数=5,即为(计算操作占用时间+IO操作占用时间)/计算操作占用时间。

转载于:https://www.dazhuanlan.com/2019/12/09/5dee6a5e4137b/?__cf_chl_jschl_tk__=f2e1c3394a7271b4d512316dbc929259e185e6bf-1601451048-0-ARt9nhWp7oq_nRp9LSQwEPsL2haG3ERi7AxfUCHP-weLQRHaBLsV6r9IpMlkzwt6rSRhEv3eqrUFXSD4ESL0asRBzZsqhtkAtIRJUzSgFEen0nFqTPQ61BCApagK2e_tNbJNK8ewJ85Gs5S0l1hA1o2hbUo3rqDKNRR6m3145QY5rJ8OfmtC-r5t8PQ4_QWPEgOlCUAGEkjpapfvimwQWlE7hNuVUTwE9mtUDWrmQ6YA2aAnj1-RuNaFrhyvId94abegVsm0GOQNDt1RTbAZd0WdxGw5gUjmnWCGBRw_77j_NTE5hCYMkRouzUI8sxtFCA

 

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值