一位专家曾在课堂上告诉我们,Windows,Linux,OS X和UNIX在线程而不是进程上扩展,所以即使在单个处理器上,线程也可能会使您的应用程序受益,因为您的应用程序将会在CPU上获得更多时间。Linux时间分割进程或线程
我试着用我的机器上的以下代码(它只有一个CPU)。
#include <stdio.h>
#include <stdlib.h>
#include <pthread.h>
pthread_t xs[10];
void *nop(void *ptr) {
unsigned long n = 1UL << 30UL;
while(n--);
return NULL;
}
void test_one() {
size_t len = (sizeof xs)/(sizeof *xs);
while(len--)
if(pthread_create(xs+len, NULL, nop, NULL))
exit(EXIT_FAILURE);
len = (sizeof xs)/(sizeof *xs);
while(len--)
if(pthread_join(xs[len], NULL))
exit(EXIT_FAILURE);
}
void test_two() {
size_t len = (sizeof xs)/(sizeof *xs);
while(len--) nop(NULL);
}
int main(int argc, char *argv[]) {
test_one();
// test_two();
printf("done\n");
return 0;
}
两种测试在速度上都是相同的。
real 0m49.783s
user 0m48.023s
sys 0m0.224s
real 0m49.792s
user 0m49.275s
sys 0m0.192s
这我觉得, “哇,线程吸”。但是,在四台处理器的大学服务器上重复测试接近四倍的速度。
real 0m7.800s
user 0m30.170s
sys 0m0.006s
real 0m30.190s
user 0m30.165s
sys 0m0.004s
我俯瞰东西解释我的家用机器时的结果?
俗话说是“在UNIX中,你最好使用进程,而不是IPC的线程”,这并不一定是因为线程模型更糟 - 尽管它是 - 或者我被告知。但是,因为流程模型大大改善,而且更轻量化。谈到IPC时,比线程模型更容易让流程模型正确稳定。而且,如果您有写入时复制和其他细节,则优点会更有利于分叉。我只是喋喋不休,因为你听到的东西引发了这个问题 - 我想你误解了我所描述的。 – 2010-05-25 16:26:29