我从另一个答案(Performance difference for multi-thread and multi-process)找到了以下引文:
接下来,你可以拥有带有“超线程”的CPU,它可以运行(at 至少)核心上的两个线程非常快 - 但是,不是进程(因为 “超线程”线程不能使用不同的地址空间) - 另一个线程可以在性能方面获胜的情况。
这准确吗?虚拟核心的两个线程(超线程)不能运行不同的OS进程?
在超线程计算机上,如果我的程序体系结构使用“管理员”进程与使用套接字进行通信的“工作”进程,那么通过将这些工作进程移动到管理程序进程,我可能会看到性能提升线程(留下套接字和其他一切相同)?
答案 0 :(得分:0)
问题的第一部分可以快速回答,你可以在你的系统上测试它是否相同。
在具有intel CPU的旧Windows系统上,我可以从任务管理器设置不同程序(或进程)对核心的每个2 HT的亲和力,看到它们实际上都会在那里运行。
关于工人和主管的第二个问题,你可以通过让他们在同一个过程中获得小的性能提升(至少在Linux上)。这是因为当你进行任务切换时,你也设置了Page Table(intel CR3-register),在任务切换期间代码看起来像这样:
if (newProcess != oldProcess)
CR3 = new page table
由于页表不同,设置CR3会使TLB无效。结果是CPU必须执行页表遍历才能找到正确的翻译。在64位cpu上,一次页面遍历通常会花费5次内存遍历,从5 * TLB 2访问(每个~3个周期)到5 *内存访问(每个~300个周期)。