Answers
我觉得你还是要搞懂几个概念的,否则真如评论所说,你的问题没有什么针对性,大家也没法做讨论。
1) 进程和线程, 某度资料很多了,自己搜下可以看到。总之你能看到的在OS上的实体,都是进程的,线程只是进程内的运行实体,你只能通过编程来控制。 现在说的这些进程、线程都是传统意义上的POSIX标准的进程,了解完这些基本概念后,有机会你可以多读读OS方面的书,可以知道Linux上的线程其实是伪线程,
http://www.ibm.com/developerworks/cn/linux/kernel/l-thread/
。 而windows的线程是“真”线程。了解完这些之后,还可以了解下如Erlang、Golang这样的轻量级线程是怎么回事。
2) 并发和并行,这2个是不同的概念。你确定你的实现是基于并行而不是并发的吗? 区别
http://blog.csdn.net/coolmeme/article/details/9997609
stackoverflow上的讨论
http://stackoverflow.com/questions/1897993/difference-between-concurrent-programming-and-parallel-programming
如果你程序够牛逼的话,当然是把所有的CPU core跑满,每个CPU上跑两个真正意义的线程就足够了,线程间的切换也是笔开销,听你的描述,貌似你的系统是个CPU敏感的程序,这时就不应该再有多process一说,跨IPC的开销比你想的要大,另外,很多程序的瓶颈根本不在CPU,往往是在IO上,所以你的情况下,最有可能出现的就是32核还没跑满,IO已经满了。
我觉得你需要、有必要搞懂这些概念之后,你也许才更清楚自己想要做的是什么,问的问题也会更有针对性。