kfm*_*e04 7 c c++ linux memory
从Linux上运行的C/C++程序的角度来看,我对双CPU机器中的内存看起来有点困惑.
案例1(理解)
使用一个四核HT CPU,32GB RAM,理论上我可以编写单个进程应用程序,使用多达8个线程和高达32GB RAM而无需交换或重载线程设施 - 我忽略了操作系统和其他这里的过程简单.
案例2(混乱)
设置64GB RAM 的双四核HT CPU会发生什么?
开发方面,你是否需要编写一个应用程序来运行两个进程(8个线程,每个32GB)进行通信,或者你可以将它作为一个进程(16个线程,64GB全内存)编写?
如果答案是前者,那么利用整个硬件的一些有效的现代策略是什么?SHM?IPC?另外,如何指导Linux为每个进程使用不同的CPU?
从应用程序的角度来看,物理CPU(管芯)的数量无关紧要.只有虚拟处理器的数量.这些包括所有处理器上的所有内核,如果在内核上启用超线程,则为double.线程以相同的方式安排在它们上面.如果核心都在一个芯片上或分布在多个芯片上并不重要.
一般来说,处理这些事情的最佳方法是不这样做.不要担心在哪个核心上运行什么.只为您的应用程序生成适当数量的线程(最多理论最大值等于系统中的核心总数),并让操作系统处理调度.
当然,内存在系统中的所有内核之间共享.但同样,操作系统可以处理物理内存的分配.很少有应用程序真的需要担心它们使用多少内存,并在线程之间分配内存.让操作系统处理.