扫码关注官方订阅号
1个CPU、4个核 intel 超线程技术,可看到8个核,但我只开4个进程,每个进程负责整个任务的四分之一的计算任务 和单个进程,跑起来的效率怎么差不多呢?
认证高级PHP讲师
先给个公式吧。
所需线程数=CPU可用核心数/(1-阻塞系数) 其中计算密集型阻塞系数趋向于0,IO密集趋向于1。具体需要通过实验来确定。
所以,你现在这种情况。
所需线程数=8/(1-0)=8, 应该用8个线程来试试。而你这里只用了4个,虽然如此,性能还是应该比单线程要好,因为毕竟由4个核在分担计算量。
但是,你却发现没有多大区别,我只能认为,你没有书写正确的多线程逻辑,造成名义上是多线程,实际上是串行的情况。
Linus: talk is cheap show me the code
不可能四个进程和一个进程效率一样,除非:1.你的4个进程实现成了串行2.整个计算过程本身的消费时间和进程切换时间相似。
要看你的进程有没有充分利用多个CPU核心,看一下多进程和单进程各个核心CPU利用率 如果各个核心是真正并行的,不存在什么依赖关系,运算速度应该会提升
因为并行是给特殊的计算机结构准备的。单机的话,如果是普通计算机,多进程应该没多大变化;但是如果是超级计算机,多进程可以充分利用计算机中的多个节点。
另外多进程的复杂性可以通过MPI之类的进程间通信框架解决。实际上写多进程的科学计算程序并不难。
这里搞C++的人好少啊!!~
难道web当道了啊?
微信扫码关注PHP中文网服务号
QQ扫码加入技术交流群
Copyright 2014-2026 https://www.php.cn/ All Rights Reserved | php.cn | 湘ICP备2023035733号
PHP学习
技术支持
返回顶部
先给个公式吧。
所需线程数=CPU可用核心数/(1-阻塞系数)
其中计算密集型阻塞系数趋向于0,IO密集趋向于1。具体需要通过实验来确定。
所以,你现在这种情况。
所需线程数=8/(1-0)=8, 应该用8个线程来试试。而你这里只用了4个,虽然如此,性能还是应该比单线程要好,因为毕竟由4个核在分担计算量。
但是,你却发现没有多大区别,我只能认为,你没有书写正确的多线程逻辑,造成名义上是多线程,实际上是串行的情况。
Linus: talk is cheap show me the code
不可能四个进程和一个进程效率一样,除非:1.你的4个进程实现成了串行2.整个计算过程本身的消费时间和进程切换时间相似。
要看你的进程有没有充分利用多个CPU核心,看一下多进程和单进程各个核心CPU利用率
如果各个核心是真正并行的,不存在什么依赖关系,运算速度应该会提升
因为并行是给特殊的计算机结构准备的。单机的话,如果是普通计算机,多进程应该没多大变化;但是如果是超级计算机,多进程可以充分利用计算机中的多个节点。
另外多进程的复杂性可以通过MPI之类的进程间通信框架解决。实际上写多进程的科学计算程序并不难。
这里搞C++的人好少啊!!~
难道web当道了啊?