我试图了解多核系统是如何工作的,以及如何为具有多核的系统编写高效的程序。我知道这是一个非常困难的话题,但我对可能的最快解决方案非常感兴趣。
首先,我试图了解线程是如何工作的。很明显,在大多数情况下,多线程可以显着提高性能。根据this page,这就是多线程的工作方式:
但是为什么在N个线程之间切换比一个接一个地运行N个线程要快呢?线程如何在只有一个 CPU 的系统上工作?
接下来,多核编程有什么意义?我认为重点是在内核之间拆分线程并在它们之间拆分任务?但是我怎样才能在 4 个 CPU 的系统上平均分割 8 个线程呢?
我是否必须使用处理器关联( cpu_affinity ) 在 CPU 之间拆分线程/进程?我可以在具有 4 个 CPU 的系统上使用pthread_create创建 4 个线程以在每个 CPU 上运行每个线程吗?
超线程如何提供帮助以及它是否有帮助?我们如何将CPU 缓存编程用于多核系统?
为什么对于像 MySQL 这样的大型旧项目来说,充分利用多 CPU 系统的优势如此困难?
我对这个问题的理论以及Linux系统的实际解决方案/示例/项目/书籍/文章(使用 C)感兴趣。
我知道这是一个越来越重要的话题,我希望我不仅仅是一个感兴趣的人。