回答
我不知道(各种)Linux调度程序如何处理这个问题,但是当线程运行在不同的内核上时,线程间通信变得更加昂贵。
因此,如果还有其他进程需要CPU时间,调度程序可能会决定在相同的CPU 上运行进程的线程。
例如,对于双核CPU,如果有两个进程使用两个线程,并且所有进程都使用CPU时间,则最好在第一个Core上运行第一个进程的两个线程,两个线程第二个核心上的另一个进程。
多个单线程进程对于系统来说比单个多线程进程更昂贵。但他们将从具有相同效率的多核CPU中受益。加上线程间通信比进程间通信便宜得多。如果这些线程真的形成单一的应用程序,我投多线程。
“但是他们将从具有相同效率的多核CPU中受益。通过“他们”,你是在谈论进程还是线程? “但”让我困惑,对不起。 – someguy 2010-08-03 10:39:02
这不是真的,来自在不同内核上运行的相同进程的两个线程需要大量内存/高速缓存同步,而单独进程不需要该内存/高速缓存同步 – 2011-11-26 03:20:29
@tolomea如果您需要同时写入共享内存,内存一致性成本将适用于任何线程或进程。 OS安排线程和进程; CPU核心将通过任何程序计数器爆炸。大多数主流处理器也至少有一个共享高速缓存级别,并且窥探写入操作以保持内存视图一致而不通过主内存。在多个CPU之间共享内存时,这会变得更加昂贵,但同样不好,无论共享访问源自何处 – tbone 2012-05-09 07:52:53
这是我的新闻。特别是Linux对线程和进程几乎没有区别。它们实际上只是共享其地址空间的进程。
显然它是写在文档的某处。不过,我宁愿用你的话来说,也不愿意传达一个模糊的谣言。 – someguy 2010-08-03 10:30:49
看看clone()系统调用。 – 2010-08-03 13:21:41
虽然Windows使用光纤和线程我有时会认为Linux使用进程和线程。 我发现,在编写多线程流程时,您必须严格,迂腐,严谨和流血,才能在设计线程的过程中实现利用任何数量的内核的好处的平衡。该进程将运行的机器。
在Linux上,与进程相比,线程是否真的不太可能从多核处理器中受益?没人知道。
共享内存多线程对从工具链到开发,调试,推理和测试代码等所有内容都施加了巨大的复杂性成本。从不使用共享内存多线程,您可以合理使用多进程设计。
@Marcelo是对的,任何像样的操作系统都会非常类似地处理线程和进程,一些线程的cpu亲和性可能会减少多线程进程的多处理器使用率,但是您应该看到任何两个进程也有一个共同的.text段。
根据复杂性和体系结构设计约束挑选线程与进程,速度几乎不会进入。
我同意设计应该是第一位的,但是当你说“从不使用共享内存多线程”时,你自相矛盾。我明白你的意思是线程更复杂,但这是夸张的。我将坚持使用线程,除非它使用进程是有意义的(可能用于“多文档”应用程序)。 – someguy 2010-08-03 21:14:08
它实际上全部取决于调度程序,多处理类型和当前运行环境。
假设没有,测试,测试,测试!
如果你是系统上唯一的多线程进程,多线程通常是一个好主意。
但是,从易于开发的角度来看,有时需要单独的地址空间和共享数据,特别是在NUMA系统中。
可以肯定的一件事:如果它是'超线程'系统,由于密切的内存共享,线程效率更高。
如果它是一个普通的多核处理..它应该是类似的。
如果是NUMA系统,最好让数据共享和代码分离。同样,这一切都依赖于架构,除非您身在HPC业务中,否则不管性能如何。
如果您在HPC(超级计算)业务中使用TEST !.这完全取决于机器(平均而言,好处是10-25%,如果你说话天数不同,那么它很重要)
- 1. cpu中的内核和线程
- 2. setitimer,SIGALRM和多线程进程(linux,c)
- 3. 研究进程和线程在Linux 2.6内核的网站
- 4. CPU调度和内核级线程
- 5. 多核和多线程
- 6. 多线程和多核心
- 7. Java单线程CPU使用和多线程CPU使用
- 8. Linux中的CPU订购(带超线程)
- 9. 查找unix(solaris/linux)中进程的线程使用资源(CPU和内存)
- 10. 转换程序为多线程,利用多核cpu
- 11. 进程的CPU使用率(任务)Linux内核
- 12. Linux内核线程在CPU硬件线程上映射1:1或m:n吗?
- 13. 多线程中未知进程的高CPU使用率
- 14. 如何使用Nodejs多CPU核心进行多进程?
- 15. 多线程和SMP Linux
- 16. Linux内核线程问题
- 17. linux - 内核线程抢占
- 18. Grails和多线程进程
- 19. Linux中的内核线程退出
- 20. Linux中进程/线程的大小
- 21. 的Linux用户空间线程,内核线程,轻量级进程
- 22. Linux内核进程管理
- 23. 核心数据和多线程编程
- 24. Linux内核线程 - 调度程序
- 25. 轮询多线程和CPU使用率
- 26. CPU核心线程分类功能
- 27. SPARC CPU VS线程VS核心
- 28. 线程和CPU亲和力
- 29. CPU负载中的Java多线程
- 30. 多核CPU单线程的行为,没有达到100%
我发现这非常有帮助,谢谢。 – someguy 2010-08-03 11:14:56