CPU 密集型多核 CPU 下可以采用进程或者方式来执行程序,但是这种资源是有限的,在高并发的前提下非 IO 密集型的操作是不是只能堆机器了呢!
1
unixeno 2020-06-02 20:50:58 +08:00 via Android 2
CPU 密集型任务的瓶颈是 CPU
要么减少计算量=用更高效的算法优化 要么提升机器计算能力=换更高性能的 CPU 或者堆机器 |
2
reus 2020-06-02 20:55:51 +08:00
改进算法啊
|
3
lithiumii 2020-06-02 21:29:48 +08:00 via Android
算法?
|
4
AX5N 2020-06-02 21:41:27 +08:00
换成 c++
|
5
cljnnn 2020-06-02 21:47:10 +08:00
数据结构与算法
|
6
namelosw 2020-06-02 21:51:31 +08:00
优化算法,优化技术栈,以前还有换专用 CPU,现在有的计算可以 GPU 之类的。
而且大部分软件也不能直接横向堆机器,得能横向执行的代码才行,比如 Spark 上跑的那种。我们面试默写的大部分算法是不能有效率地横向执行的。 |
7
cabing 2020-06-02 22:00:48 +08:00
瓶颈在 cpu,得看那些功能影响 cpu,分层次去优化。
程序 cpu 性能监控。对当前程序的消耗能有个了解啊。方便后续优化对比。 编程语言层级:越靠近操作系统的语言性能越高,有些地方可以用汇编代替 代码层级:优化代码功能 代码设计层级:合理的设计,是否充分利用了每个 cpu 业务层级:业务能否优化和改进 架构层级:架构上是否合理?是否高效?如果单机不合理,是否能够多机部署呢? 就像上面说的也可以换专业的 GPU 来,GPU 编程可能有点不一样,需要学习下。 当然算法也很重要。如果真的是很耗费资源,是时候对关键部分做算法分析了。 土豪只用看下架构能够堆机器就行,不用太管其他的优化。 |
8
dazhangpan 2020-06-02 22:21:40 +08:00
能做的事情特别多,特别特别多...先学个 profiler 作为入门吧..
|
9
nightwitch 2020-06-02 22:43:58 +08:00
CPU 密集型
高并发 这两个词是矛盾的,CPU 密集型的应用都期望尽可能的抢占 CPU 和系统资源, 而高并发需要每一个会话尽可能的少占用资源。 |
10
Mithril 2020-06-02 22:50:22 +08:00
改算法
换 Cpp+Intel Compiler 手写并行指令 横向堆机器的前提是你的算法可以横向扩展,并不是所有算法都可以这么干的。有的时候你横向扩展带来的通信损耗都比收益高 |
11
tanranran 2020-06-02 22:51:08 +08:00
换语言
|
12
MiffyLiye 2020-06-02 23:59:37 +08:00
1L 已经指出来了两个大方向
补充一下要减少计算量,除了改进算法之外,还有其他选项 1. 降低资源消耗 改进算法 降低对精确度的要求:用精确度不高的算法(例如 Monte Carlo method ) 降低对实时性的要求:用任务队列异步处理 降低其他要求:需要综合很多因素权衡利弊 2. 提高资源供给 换更强的 CPU 加 CPU |
13
ConradG 2020-06-03 00:11:14 +08:00
还可以撸专用芯片,比如写个 FPGA 之类。
|
14
penguinWWY 2020-06-03 01:28:53 +08:00
Profile-guided optimization
|
15
msg7086 2020-06-03 04:18:53 +08:00 via Android
还可以想办法改用 GPU 。显卡同价位下性能可不是强一点点。
|
16
p2pCoder 2020-06-03 08:44:36 +08:00
性能调优 先跑个 profiler 找下瓶颈在哪
并发的 cpu 密集计算 建议 几方面优化 ,首先是合理的 计算分片,减少线程 进程切换的 cpu 消耗,然后是并行计算要考虑中间结果的缓存,看逻辑上是否有大量的重复计算,最后,就是优化算子,比如 整形 浮点型的位数,字符串转 hash,减少字符串操作,用取 hash 及 hash 后的整数的位运算取代 如果是 java golang python 这些语言,还要考虑在计算密集型的应用中,gc 的巨大压力,以及语言本生的限制,如果最后真的是调优无法达到要求,就建议 c++重写,性能会有质的提升,还可以从编译器以及硬件架构层面进行优化 |
17
wtsamuel 2020-06-03 12:33:26 +08:00
调优以及
能用硬件解决的事,别用软件解决 |