我编写了利用POSIX线程的软件,以便我可以在进程中使用共享内存。我的问题是,如果我有一台运行Ubuntu的机器有4个处理器,每个处理器有16个核心。使用16个线程运行4个进程或使用64个线程运行1个进程是否更有效?每个处理器都有一个专用的32GB内存。
我主要担心的是,在看到1个进程后会发生很多memcopy。
总结:
在4(16核)Proc机器上
1个进程64个线程?
4个进程每个16个线程?
如果该过程需要超过32 GB的RAM(专用于一个Proc的数量),答案会有所不同吗?
感谢您的帮助
答案 0 :(得分:1)
取决于您的应用程序的功能。
单线程进程中的线程比多线程进程中的线程运行得更快,因为后者需要在malloc()
,fprintf()
等库函数中的线程之间进行同步。此外,多线程进程中的更多线程可能会导致更多的锁争用相互减慢。如果线程不需要通信而不共享数据,则它们不需要在同一个进程中。
在你的情况下,你可以通过16个线程而不是1个进程和64个线程获得更好的并行性。