高并发,执行耗时短的任务,还有低并发,执行耗时长的任务,各自选取什么样的线程池会比较合理?为什么?如果业务场景是高并发,且任务耗时长时,有什么解决思路?


cpu密集型任务:减少并发线程数,减少cpu上下文切换带来的影响。
io密集型任务:增加并发线程数,让CPU去切换其他线程充分忙起来。


线程池的关键点是:1、尽量减少线程切换和管理的开支; 2、最大化利用cpu。
对于1,要求线程数尽量少,这样可以减少线程切换和管理的开支;
对于2,要求尽量多的线程,以保证CPU资源最大化的利用。
 
所以对于任务耗时短的情况,要求线程尽量少,如果线程太多,有可能出现线程切换和管理的时间,大于任务执行的时间,那效率就低了;
对于耗时长的任务,要分是cpu任务,还是io等类型的任务。如果是cpu类型的任务,线程数不宜太多;但是如果是io类型的任务,线程多一些更好,可以更充分利用cpu。
所以:
高并发,低耗时的情况:建议少线程,只要满足并发即可;例如并发100,线程池可能设置为10就可以
低并发,高耗时的情况:建议多线程,保证有空闲线程,接受新的任务;例如并发10,线程池可能就要设置为20;
高并发高耗时:1要分析任务类型,2增加排队,3、加大线程数

对于高并发耗时长的情况,我认为,思路就是把一个难以解决的问题转化成我们已知的已经有解决方案的问题,以此来解决。
所以 ,高并发又耗时长,可以转化为
      1、高并发,耗时短的问题   –>   异步处理+回调,和情况1吻合
      2、低并发,耗时长的问题   –>   前端加load balance,把高并发分摊成若干低并发,和情况2吻合
其实说到核心,如果真遇到高并发耗时长的场景,只能是加机器,加计算单元(无论是异步加回调还是load balance)

自己对多线程的一点思考相关推荐

  1. python多线程队列处理_Python线程和队列使用的一点思考

    Python线程和队列使用的一点思考 1. 斗哥采访环节请问为什么要使用线程? 答:为了提高程序速度,代码效率呀. 请问为什么要使用队列? 答:个人认为队列可以保证线程安全,实现线程间的同步,比较稳. ...

  2. 算法优化之c++多线程优化:思考与总结

    最近的项目中要用多线程来对代码进行优化,期间查阅了一些资料,主要是踩过一些坑,在此记录一下,给自己提个醒. 1.什么是多线程优化 首先我们要知道什么是线程,这点没有谁比维基百科说的更好了,直接点击查看 ...

  3. mysql 手动写时间_关于数据库中如何存储时间的一点思考

    1.切记不要用字符串存储日期 我记得我在大学的时候就这样干过,而且现在很多对数据库不太了解的新手也会这样干,可见,这种存储日期的方式的优点还是有的,就是简单直白,容易上手. 但是,这是不正确的做法,主 ...

  4. 对于表列数据类型选择的一点思考

    对于表列数据类型选择的一点思考 简介 SQL Server每个表中各列的数据类型的选择通常显得很简单,但是对于具体数据类型的选择的不同对性能的影响还是略有差别.本篇文章对SQL Server表列数据类 ...

  5. 关于STM32驱动DS1302实时时钟的一点思考

    关于STM32驱动DS1302实时时钟的一点思考 之前用51驱动过DS1302,没用多久就输出了正确的时间.当时以为这块芯片其实没啥,很简单.但是现在用STM32做项目,用到同样的芯片,以为这有何难, ...

  6. 对高并发流量控制的一点思考

    前言 在实际项目中,曾经遭遇过线上5W+QPS的峰值,也在压测状态下经历过10W+QPS的大流量请求,本篇博客的话题主要就是自己对高并发流量控制的一点思考. 应对大流量的一些思路 首先,我们来说一下什 ...

  7. 关于c语言结构体偏移的一点思考

    注:此处只是利用了编译器的特性来计算结构体偏移 这句话就一笔带过,说得有点牵强附会.以后有时间自己再详细了解一下编译器的特性... more exceptional c++ 中文版 26页 https ...

  8. App用户体验的一点思考

    App用户体验的一点思考 最近我在团队中负责TImers4Me这款Android软件的开发.维护和更新,软件每次在市场上的发布都能得到用户一些有价值的反馈,通过收集整理用户们的使用反馈,我们常能看到一 ...

  9. 对高并发流量控制的一点思考 推荐

    前言 在实际项目中,曾经遭遇过线上5W+QPS的峰值,也在压测状态下经历过10W+QPS的大流量请求,本篇博客的话题主要就是自己对高并发流量控制的一点思考. 应对大流量的一些思路 首先,我们来说一下什 ...

最新文章

  1. oracle11g数据库升级
  2. C语言获取链表的中间值Middle of the Linked List(附完整源码)
  3. 编译并使用boost库(win7+boost1.60+vs2013)
  4. HAL——硬件抽象层读书笔记
  5. 【原创】Linux基础之去掉windows中的\r
  6. 入驻商户卖隐形眼镜护理液 饿了么遭监管警告
  7. php推送系统,php 如何加入即时推送的功能
  8. ubuntu 14.04 64bit 安装 oracle 11g r2
  9. spss数据调整后重新计算
  10. 贾俊平统计学思维导图- 第十三章 时间序列分析和预测
  11. 使用python下载网络上加密的ts格式视频,并用ffmpeg进行合成
  12. SVN 无法clean up解决方案
  13. 杰理之无线MIC【篇】
  14. oracle数据库基本命令使用汇总
  15. C语言简单编程案例(四)
  16. npm安装electron报RequestError: socket hang up错误解决方法
  17. CCPC-Wannafly Comet OJ 夏季欢乐赛(2019)A——完全k叉树
  18. 鹏城实验室开源技术总师余跃:新一代人工智能开源生态的探索与实践
  19. AGV小车如何实现无人搬运自动导引代替人工
  20. 「镁客早报」世界产权组织称:2018年国际专利申请华为排名第一;微软股价大涨,市值超9000亿美元... 1

热门文章

  1. I2C总线学习(二)--数据传送格式
  2. IPSEC传输模式和隧道模式的区别
  3. Python 进阶_函数式编程
  4. Openstack组件部署 — Nova overview
  5. python-简单测试wsgi
  6. 一次 JVM 调优的笔记
  7. 分布式理论(一) - CAP定理
  8. XamlReader动态使用xaml
  9. 快学Scala-第八章 继承
  10. Storm【压力测试】- 系列1: 进行简单的压力测试