专栏首页架构说CPU核数和线程 (池)数量的关系(概念理解)

CPU核数和线程 (池)数量的关系(概念理解)

目前手机配置

支持HUAWEI Mate 8非凡表现的,

是拥有强大性能的华为麒麟950芯片。

此芯片为八核4*Cortex A72

2.3GHz + 4*Cortex A53 1.8GHz

我笔记本配置:

问题 是不是cpu核数越高,性能有越好好 性能高关键并发能力强, 问题转移到 多线程与 cpu 核数的关系?

1 多线程目的

多线程开发的目的:为了提高 CPU 利用率(记住这个很重要)

2 多线程举例

2.1 任务A:

a1:访问数据库-耗时10ms
a2:计算数据1-耗时2ms
b1:访问文件-耗时10ms
b2:计算数据2-耗时2ms
c1:计算数据(前面获取的数据1和数据2)-耗时2ms

2.2 执行时间对比

如果用单线程

执行的时间是26ms(10+2+10+2+2),这个很好理解

如果用多线程

这个计算时间是有些复杂的,这里等下解释

理想情况下,机器是双核,同时不考虑超线程,这个时候把 a1+a2, b1+b2 分别放入单独的线程执行(记住 I/O 是不要占用 CPU 资源的)

执行时间是 14ms(10+2+2)

这里就体现出来了,高效利用 CPU,降低执行时间,当然是合理的利用多线程,好处多多,但也不要为了多线程而多线程,看下例(任务B):

2.3 任务B

a1:访问数据库-耗时2ms
a2:计算数据1-耗时2ms
b1:访问文件-耗时40ms
b2:计算数据2-耗时2ms
c1:计算数据(前面获取的数据1和数据2)-耗时2ms

单线程:48ms 多线程:44ms

这里多线程只比单线程节省了 4ms,而且这还是理想情况下,没有考虑到线程切换带来的损耗,如果线程切换损耗 2ms,那么使用多线程得不偿失,具体情况具体分析,当然谁也不会精确计算程序执行时间,这里需要在调试阶段或者日志记录中寻找瓶颈

3 多线程与 cpu 核数的关系

一个程序等待IO时间 和处理逻辑时间 那个长

多线程只是为了提高 CPU 利用率,客观的说多线程是跟 CPU 核数是没有关系的,不要混淆概念,现代计算机的单 CPU 多核(相比较多 CPU 单核)都是为了提高计算效率,多线程跟 CPU 核数是没有关系的

总之多线程只是逻辑上的做事的方式,CPU 核数是提高效率的物理手段

4 超线程

超线程这个概念很有意思,上学的时候课本应该是有介绍的,请允许copy一段过来

4.2 概念

每个单位时间内,CPU只能处理一个线程(Thread)。除非有两个核心处理单元,否则要想在单位时间内处理超过一个的线程是不可能的。

超线程HT(Hyper-Threading)技术是在单个核心处理单元中集成两个逻辑处理单元,也就是一个实体内核(共享的运算单元),两个逻辑内核(有各自独立的处理器状态),从而可以在单位时间内处理两个分别进行整数和浮点运算的线程,模拟双内核运作。

4.2 例子

设一个进程要完成两个任务:任务 1 和任务 2,并且任务 1 要经历 A1àB1àC1 三个步骤才能完成,任务 2 要经历 A2àB2àC2 三个步骤才能完成。

①如果两个任务同步执行的话,完成两个任务是这样执行的: 花费时间段:

这样从 A1 到 C2 只能一个一个地执行,当 A1 执行时,CPU 被占用,B1 到 C2 的线程只能等待,甚至当它们彼此之间并不竞争同一个资源时,也要等待前面的线程执行完毕后才能执行。

②如果两个任务异步执行的话,完成两个任务是这样执行的: 花费时间段:

这样,任务1和任务2就分成两个独立的执行对象,也就是说: A1àB1àC1 和 A2àB2àC2是并发执行的。当 A1 在执行某个运算时,A2 线程可以去做其他的一些事情,比如访问磁盘等外部设备等。

对比①和②两种执行方式,完成所有任务,方式①需要 6 个时间段,而方式②只需要 3 个时间段,方式②所需时间是方式①的一半,所以方式②完成整个任务要快于方式①。

5 综述

我服务器是64核的,请问业务流程配置多个线程 性能更好呢? 多线程的用途是IO延迟隐藏,提高程序并发能力和CPU核数毫无关系 具体需要结合业务进程测试验证!

参考

https://segmentfault.com/a/1190000 http://bbs.csdn.net/topics/390618790?page=1

本文分享自微信公众号 - 架构说(JiaGouS),作者:troy

原文出处及转载信息见文内详细说明,如有侵权,请联系 yunjia_community@tencent.com 删除。

原始发表时间:2016-03-21

本文参与腾讯云自媒体分享计划,欢迎正在阅读的你也加入,一起分享。

我来说两句

0 条评论
登录 后参与评论

相关文章

  • memcache启动过程以及线程模型

    耗时三天 阅读了 2个文件 memcached-1.5.4\memcached.c memcached-1.5.4\thread.c 具体过程已经记不清楚了,可...

    程序员小王
  • Socket基本-TCP粘包问题

    Thrift是Facebook的一个开源项目,主要是一个跨语言的服务开发框架 提供完整的解决方案 优点很多也就不说了, 但是有个缺点必须要求客户端调用采用thr...

    程序员小王
  • 可扩展的Web架构和分布式系统(翻译)

    原文:Scalable Web Architecture and Distributed Systems

    程序员小王
  • go-web 服务端框架性能测试

    由于K8s缘故涉猎go语言,发现golang的web框架很多,都号称高性能标杆;之前一直致力于c++高性能服务端框架研究,出于好奇,想单从性能层面客观比较一下g...

    用户2103032
  • Oracle推出开源轻量级 Java 微服务框架 Helidon

    近日,Oracle推出了一个新的开源框架Helidon,该项目是一个用于创建基于微服务的应用程序的Java库集合。和Payara Micro、Thorntail...

    搜云库技术团队
  • 什么是DVP?一文告诉你如何应对区块链安全危机

    存在安全隐患的区块链生态自然成为黑客眼中的香饽饽,近年来,一系列安全事件层出不穷,波及范围和资产损失数额也不断增加。区块链行业的安全问题也愈发引人注目。

    区块链大本营
  • BAT面试题1:请简要介绍下SVM

    接下来,每天推送1道BAT的面试题,一般问到的这些知识点都是很重要的,所以知道的呢就再复习一下,不知道的赶紧弥补。日积月累,你会在不知不觉中就已入机器学习的大门...

    double
  • 第180天:HTML5——本地存储

    localStorage方法存储的数据没有时间限制。第二天、第二周甚至是第二年之后,数据依然可用。

    半指温柔乐
  • 【每日一题】问题 1108: 守望者的逃离

    题目描述 恶魔猎手尤迫安野心勃勃.他背叛了暗夜精灵,率深藏在海底的那加企图叛变:守望者在与尤迪安的交锋中遭遇了围杀.被困在一个荒芜的大岛上。为了杀死守望者,尤...

    编程范 源代码公司
  • WCF技术剖析之二十二: 深入剖析WCF底层异常处理框架实现原理[下篇]

    WCF客户端和服务端的框架体系相互协作,使得开发人员可以按照我们熟悉的方式进行异常的处理:在服务操作执行过程中抛出异常(FaultException),在调用服...

    蒋金楠

扫码关注云+社区

领取腾讯云代金券