成功数据科学家都知道的黄金法则
|
不管什么样到编程语言,什么样到代码框架,最终都是由CPU去执行完成的(当然这么说不太准确,也有GPU、TPU、协处理器等其他情况,当然这不是本文探讨的重点)。 所以要想提高性能,提高并发量,首要问题就是如何让CPU跑的更快? 这个问题,也是一直以来CPU厂商一直在努力追求的方向。 如何让CPU更快?CPU厂商做了两个方面的努力:
对于第一个方向,CPU执行指令的快慢,是跟CPU的主频紧密相关的,如何更快的取指令、指令译码、执行,缩短CPU的指令周期,提升主频在相当长一段时间里都是非常有效的办法。 从几百MHz,到如今到几GHz,CPU主频有了长足的进步,相同时间里能够执行的指令数变的更多了。 对于第二个方向,如何提升CPU读取数据的速度,答案就是加缓存,利用局部性原理将内存中经常会访问的数据搬运到CPU中,这样大大提升了存取速度。 从一级缓存,到二级缓存,乃至三级缓存,CPU缓存的层级和容量也在不断提升,读写数据到时间省了不少。 但随着时间到推移,尤其进入21世纪之后,处理器厂商发现,进一步提升主频变得越来越困难了,CPU的缓存也很难进一步扩容。 怎么办呢?既然一个人干活到速度已经很难再提升,那何不多找几个人一起干?于是,多核技术来了,一个CPU里面有多个核心,众人划桨开大船,CPU到速度再一次腾飞~ 甚至,让一个核在“闲暇时间”,利用“闲置资源”去执行另外的线程,诞生了让一个核“同时”执行两个线程的超线程技术。 上面简单交代了为了提升性能,CPU所做的努力。但是光是CPU快是没用的,还需要我们更好的去利用开发,否则就是对CPU算力的浪费。 上面提到了线程,是的,如何提高性能,提高并发量?使用多线程技术当然是一个非常好的思路。 但多线程的引入,就不得不提到两个跟线程有关到话题:
多个线程协同工作,必然会引入同步的问题,常规解决方案是加锁,加锁的线程一般会进入阻塞。 线程遇到阻塞了,就需要切换,而切换是有一定的成本开销的,不仅是系统调度的时间开销,还可能有CPU缓存失效的损失。 如果线程频频加锁,频频阻塞,那这个损失就相当可观了。为了提升性能,无锁编程技术就出现了,利用CPU提供的机制,提供更轻量的加锁方案。 同时,为了让切换后的线程仍然能够在之前的CPU核心上运行,降低缓存损失,线程的CPU亲和性绑定技术也出现了。 现代操作系统都是以时间片的形式来调度分配给多个线程使用。如果时间片还没用完就因为这样或那样的原因将执行机会拱手相让,那线程也太亏了。 于是,有人提出要充分利用CPU,别让线程阻塞,交出执行权,自己在应用层实现多个执行流的调度,这里阻塞了,就去执行那里,总之要把时间片充分用完,这就诞生了协程技术,阻塞了不要紧,我还能干别的,不要轻易发生线程切换。 内存 与CPU工作相关的第一亲密伙伴就是内存了,二者协作才能唱好一出戏。 提升内存访问的速度,同样是高性能开发话题重要组成部分! 那如何提升呢?硬件层面程序员是很难改变到,咱们只好从软件层面下功夫。 内存的管理经历了从实地址模式到分页式内存管理,如今的计算机中,CPU拿到的地址都是虚拟地址,这中间就会涉及到地址到转换,在这里就有文章可做,有两个方向可以努力:
(编辑:广元站长网) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |
- Gartner:金融服务生态系统部署区块链至少还需要三年时间
- 柔宇技术大会:柔性屏开启无限可能 新品发布加速构建战略合
- Q3中国手机市场保有率宣布,谁将掌握5G时代主动权?
- Strategy Analytics:以生态建设支持确定性网络的发展
- 三星致力于推出多样化的创新产品 新旗舰Galaxy S20系列与折
- AMD发布CDNA架构Instinct MI100加速显卡 加速百亿亿次级时代
- OPPO Reno5 Pro+推送ColorOS 12 新提速览卡片、便签涂鸦工具
- 新华三助力浙江省人民医院医疗模式革新
- 研华智诚门店AIoT解决方案平台 StoreVue上市
- 会畅通讯混合云解决方案,为中国信科集团轻松实现多方异地协


