首页 > 其他分享 >多个CPU--多核--核心线程数​理解

多个CPU--多核--核心线程数​理解

时间:2024-05-20 11:19:32浏览次数:19  
标签:-- getRuntime availableProcessors 50 线程 import CPU

今天在创建简单线程池时,使用 Runtime.getRuntime().availableProcessors() 有些不懂网上这么配置的理由,百度说是计算资源(逻辑核心数)与 CPU 有关,但是和 CPU 具体啥关系还是一知半解,今天通过看资料,整理一下我的理解。

import com.google.common.util.concurrent.ThreadFactoryBuilder;
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;
import org.springframework.scheduling.annotation.EnableAsync;
import org.springframework.scheduling.concurrent.ThreadPoolTaskExecutor;

import java.util.concurrent.*;

/**
 * @author yangchao
 * @description 线程池配置
 * @date 2024/05/20
 */
@Configuration
public class ThreadPoolInitConfig {

    public static final String TEST_THREAD_POOL_NAME = "TEST_THREAD_POOL_NAME-%d";

    @Bean(name = "testExecutorService")
    public ExecutorService testExecutorService() {
        ThreadFactory namedThreadFactory = new ThreadFactoryBuilder()
                .setNameFormat(TEST_THREAD_POOL_NAME).build();
        ExecutorService threadPoolExecutor = new ThreadPoolExecutor(Runtime.getRuntime().availableProcessors() * 2 + 1,
                Runtime.getRuntime().availableProcessors() * 2 + 1,
                0L, TimeUnit.SECONDS,
                new LinkedBlockingQueue<>(),
                namedThreadFactory);
        return threadPoolExecutor;
    }

}

举例说明

【1】例如你需要搬100块砖,你现在有50双手。当你将这50双手全安装到一个人身上,这模式就是CPU多核处理器。当你将这50双手安装到50个人身上工作,这模式就是多个CPU,每个人有2只手,分别都可以搬一块砖,这相当于支持超线程cpu, 即有50个物理核心数,每个物理核心数有2个逻辑核心数,即一共有100个逻辑核心数;
【2】将50双手放在一个人身上,会带来一些问题,例如同时搬100块砖,身体就会顶不住,这就是CPU多核的极限。于是,当要搬的砖较多的时候,多个CPU的方式就显现出来了,人多力量大呀;
【3】多核CPU与多个CPU并不冲突,相反,两者会相互结合。目前有些大型机经常会有多个CPU,每个CPU都是多核的。比如50个物理CPU,每个物理CPU都有2个核,那么最终的CPU就是100核的。

结论

Runtime.getRuntime().availableProcessors() 返回的是可用的计算资源,而不是CPU物理核心数,对于支持超线程的CPU来说,单个物理处理器相当于拥有2个逻辑处理器,能够同时执行2个线程。

Runtime.getRuntime().availableProcessors()    // 我的电脑输出是:8    即同时会有8个线程处理8个任务

 

标签:--,getRuntime,availableProcessors,50,线程,import,CPU
From: https://www.cnblogs.com/blogtech/p/18201481

相关文章

  • mongo replicaset=rs0 com.mongodb.MongoSocketException: centosc
    1、描述虚拟机搭建mongo副本集虚拟机的设定的hostname为: centosc。虚拟机IP为192.168.25.129搭建三个副本集端口分别为,28017、28018、28019,运行mongo副本集报错,报错信息如下:2024-05-2010:22:39:235[main]INFOorg.apache.coyote.http11.Http11NioProtocol-StartingProtocol......
  • python去除图片白边黑边
    主要用于去除图片的白边和黑边,比如在截图表情包的时候,通过小米的传送门保存图片的时候,图片往往会有黑边和白边,此时使用此脚本二次处理importosfromPILimportImage,ImageChopsdeftrim_white_border(image):bg=Image.new(image.mode,image.size,image.getpixel((0......
  • ABC354 E - Remove Pairs 做题笔记
    ABC354E-RemovePairs做题笔记题目链接对于这种带有博弈论的dp,考虑这样设计状态:令\(f_s\in\{1,0\}\)表示“游戏局面”为\(s\)时,先手必胜还是必败。本题中,“游戏局面”可以表示为剩余卡牌的编号集合。又因为本题中\(N\)​很小,通过状压,可以直接用一个int表示游戏......
  • conda使用指南
    Python与Conda:简单、便捷的包管理工具Python作为一门流行的编程语言,在数据分析、机器学习和深度学习等领域得到了广泛应用。然而,Python的库众多,版本繁多,所以在库的安装和版本管理上可能存在困难。为解决这一问题,我们可以借助Conda这一方便易用的包管理工具。安装Anaconda首先......
  • 进销存项目讲解
    概念进销存业务流程图功能基础项目类目和商品类目支持树表结构仓库信息、支付方式、客户信息等支持关联下拉选择商品管理可以选择采购单位,支持采购时是大单位还是小单位。采购订单仓库支持配置用户仓库权限,和数据权限分开子表支持弹窗选择商品,搜索框支持模糊匹......
  • CGCL论文阅读笔记
    Candidate–awareGraphContrastiveLearningforRecommendation论文阅读笔记Abstract现存问题:​ 大多数基于gcl的方法使用启发式数据增强方法,即随机节点/边下降和属性掩蔽,来构造对比对,导致重要信息的丢失。解决方案:​ 为了解决基于gcl的方法中的问题,我们提出了一种新的方......
  • [ARC178C] Sum of Abs 2 题解
    题意:给定\(n\)和\(L\)以及\(n\)个数\(a_i\)。对于每个\(1\lei\len\),求出一个长度为\(L\)的\(b\)序列满足:\(\sum_{i=1}^{L-1}\sum_{j=i+1}^{L}|b_j-b_i|=a_i\),并最小化\(b\)中的最大值。显然\(b\)中元素的顺序不影响原式的结果,所以我们可以假定\(b\)是不......
  • Windows搭建ntp服务器
    1、启用WindowsTime服务:打开“服务”管理工具(可以通过搜索栏输入services.msc)。找到“WindowsTime”服务,确保它已启动并设置为“自动”启动类型。2、配置注册表:使用管理员权限打开“注册表编辑器”(regedit)。导航到HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Services\W3......
  • Java基础-转岗学习路线
    2023年初,因为公司项目的调整变化,原来的Unity项目取消了,没有其他适合的项目和岗位可以做了,公司也不进行裁员而是允许转岗,鉴于就业形势不佳以及我有机会来好好学习其他技术,于是我决定转岗Java后端开发,当然,总归还是迫于无奈,对我来说也是个不小的挑战,因为虽然做开发四年有余,有Java代码......
  • 项目管理之八大绩效域------笔记(五)
    18.7度量绩效域度量绩效域涉及评估项目绩效和采取应对措施相关的活动和职能度量是评估项目绩效,并采取适当的应对措施,以保持最佳项目绩效的过程。一、预期目标:①对项目状况充分理解;(随时对项目有充分了解)②数据充分,可支持决策;③及时采取行动,确保项目最佳绩效;④能够基......