首页 > 其他分享 >并发创建多少个线程合适

并发创建多少个线程合适

时间:2023-03-04 10:46:26浏览次数:34  
标签:耗时 创建 利用率 并发 密集型 计算 线程 CPU

前言

使用多线程的目的是为了提升程序性能,在并发编程领域,提升性能本质上就是提升硬件的利用率,再具体点,就是提升 I/O 的利用率和 CPU 的利用率,而解决的方案就是多线程。

那问题来了,创建多少个线程合适呢?线程多了会造成 CPU 上下文切换,浪费资源不说性能还上不去,少了吧,CPU 利用率又上不去。

创建多少个线程比较合适

创建多少线程合适,要看多线程具体的应用场景。我们的程序一般都是 CPU 计算和 I/O 操作交叉执行的,由于 I/O 设备的速度相对于 CPU 来说都很慢,所以大部分情况下,I/O 操作执行的时间相对于 CPU 计算来说都非常长,这种场景我们一般都称为 I/O 密集型计算;和 I/O 密集型计算相对的就是 CPU 密集型计算了,CPU 密集型计算大部分场景下都是纯 CPU 计算。I/O 密集型程序和 CPU 密集型程序,计算最佳线程数的方法是不同的。

CPU密集型

理论上 线程的数量=CPU核数 就是最合适的,不过在一般会设置为 CPU核数 + 1,这样因为偶尔的内存页失效或者其他原因导致的线程阻塞,这个线程可以顶上,从保证CPU利用率。

I/O密集型

如果 CPU 计算和 I/O 操作的耗时是 1:1,那么 2 个线程是最合适的。如果 CPU 计算和 I/O 操作的耗时是 1:2,那多少个线程合适呢?

由此我们可得到一个计算公式

  • 单核计算方式:最佳线程数 =1 +(I/O 耗时 / CPU 耗时)

  • 多核计算方式:最佳线程数 =CPU 核数 * [ 1 +(I/O 耗时 / CPU 耗时)]

标签:耗时,创建,利用率,并发,密集型,计算,线程,CPU
From: https://www.cnblogs.com/niuben/p/17177783.html

相关文章

  • 线程的停止(建议线程正常运行停止)
    packagecom.Java;publicclassTestStopimplementsRunnable{//测试线程停止//1.建议线程正常停止-->利用次数不建议死循环//2.建议使用标志位-->设置一......
  • python 递归创建文件夹os.makedirs(转载)
    os.makedirs(name,mode=0o777,exist_ok=False)作用用来创建多层目录(单层请用os.mkdir)参数说明 name:你想创建的目录名mode:要为目录设置的权限数字模式,默认的模式为......
  • 【代理】【四】代理源码解析-Cglib代理-Generator代理对象创建过程
    1 前言 上节我们简单感受了下Cglib的一个代理过程,并且我也说到了Enhancer创建代理的时候,首先会创建对象Key出来,用于标识这个类以及将其作为缓存的Key,然后再创建代理对......
  • 多线程
    #线程类fromthreadingimportThreaddeffunc():foriinrange(1000):print("func",1)if__name__=='__main__':t=Thread(target=func......
  • idea创建web项目
    骨架创建,那块打勾,删除多余xml里的行,main里directory创建缺的java和resources <!--设置jdk--><properties><maven.compiler.source>11</maven.compiler.source><mave......
  • android sqlite动态创建表,Android 解决sqlite无法创建新表的问题
    使用SQLite时,继承SQLiteOpenHelper,onCreate方法只有在第一次创建数据库的时候才会被调用,因此,重新更改或者添加表时,需要在DDMS里面删掉原来的.db文件,重新运行,就可以~补充......
  • 用户级线程和内核级线程
    用户级线程的特点:不需要修改内核代码,内核不知道线程的存在,所有的线程管理都由应用程序管理。用户级线程的优点:所有的线程都在用户空间,所以它在切换线程时不需要从用户态切......
  • Winform中操作Sqlite数据增删改查、程序启动时执行创建表初始化操作
    场景Sqlite数据库SQLite是一个进程内的库,实现了自给自足的、无服务器的、零配置的、事务性的SQL数据库引擎。它是一个零配置的数据库,这意味着与其他数据库不一样,您不......
  • 无锁并发,CAS等
                                         Unsafe   ......
  • 该如何正确的中断一个线程的执行?
    摘要:本文以一个案例的形式,来为大家详细介绍下为何中断执行的线程不起作用。本文分享自华为云社区《【高并发】我们该如何正确的中断一个线程的执行??》,作者:冰河。写在前......