• 第一部分:并发理论基础10->创建多少线程才合适


    1.为什么要使用多线程

    提升程序性能

    衡量性能指标主要由吞吐量和延迟,
    延迟:越短,程序执行的越快,性能越好
    吞吐量:单位时间能处理的请求数,吞吐量越大,程序处理的请求越多,性能越好

    核心
    第延迟,高吞吐量

    2.多线程应用场景

    优化算法
    硬件性能发挥到极致(提升IO的利用率和cpu利用率)

    多线程方案,解决cpu,io设备综合利用率的问题
    一个线程
    image
    两个线程
    image
    将cpu利用率和io利用率提升了100%,单位时间处理请求数量翻番,吞吐量提高了一倍

    多核时代,多线程可以降低响应时间,单核时代,如果没有io操作,多线程不但不会提升性能,还会性能更差。

    image

    3.创建多少线程合适

    一般程序都是cpu和io交叉进行,io速度慢,cpu快
    io操作执行时间对cpu来说非常长

    cpu密集型应用,多线程本质是提高多核cpu利用率。理论4核cpu,创建4个线程就可以了。理论上线程数量=cpu的核数,不过在工程中都设置cpu核数+1,防止线程因偶尔内存页实效或者其他原因导致阻塞时,这个额外的可以顶上,保证cpu的利用率

    io密集型应用,比较麻烦,需要进行算法的设计。cpu计算和io操作的耗时如果是1:1,那么2个线程是最合适,如果cpu和io计算的耗时比是1:2,那么3个线程比较合适。
    image
    计算公式单核:最佳线程数 = 1 + (io耗时 / cpu耗时)
    计算公式多核: 最佳线程数 = CPU核数 * [ 1 + (io耗时 / cpu耗时) ]
    那么io耗时和cpu耗时比是一个关键参数,这个参数未知,动态变化,生产环境要进行估算。做压测来验证估算。

    4.总结

    线程数不是越多越好
    硬件的性能发挥到极致

    原创:做时间的朋友
  • 相关阅读:
    图片上传功能,前端,后台,完整版代码
    JS 字符串常用操作
    安卓真机运行webview,被撑破,解决方案。
    项目写法,总结
    VUE 的常用
    检查代码的方法
    很牛B的写法,数据库,查询,放在一个方法里面,统一过滤、
    走过的坑
    说说IEnumerable和yield
    关于display: inline-block的间隙问题
  • 原文地址:https://www.cnblogs.com/PythonOrg/p/14955822.html
Copyright © 2020-2023  润新知