前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >CPU核数和线程 (池)数量的关系(概念理解)

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

作者头像
程序员小王
发布2018-04-12 17:02:13
5.3K0
发布2018-04-12 17:02:13
举报
文章被收录于专栏:架构说

目前手机配置

支持HUAWEI Mate 8非凡表现的,

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

此芯片为八核4*Cortex A72

2.3GHz + 4*Cortex A53 1.8GHz

我笔记本配置:

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

1 多线程目的

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

2 多线程举例

2.1 任务A:
代码语言:javascript
复制
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
代码语言:javascript
复制
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

本文参与 腾讯云自媒体同步曝光计划,分享自微信公众号。
原始发表:2016-03-21,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 Offer多多 微信公众号,前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • 1 多线程目的
  • 2 多线程举例
    • 2.1 任务A:
      • 2.2 执行时间对比
        • 2.3 任务B
        • 3 多线程与 cpu 核数的关系
        • 4 超线程
          • 4.2 概念
            • 4.2 例子
            • 5 综述
            领券
            问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档