- 论坛徽章:
- 0
|
奇怪的问题:单线程快过多线程?\r\n在一台sun服务器上运行,2cpu, 8G RAM\r\n线程做的事情完全没有关系,不存在线程间同步等问题。\r\n结果是单线程快过多线程,faint\r\n如果是unbound线程,则差不多,单线程略快。\r\n如果是bound线程,则单线程快过多线程一倍。\r\n唯一的例外是线程里对map<int,int>;进行插入和删除操作(如下程序被#if 0注释掉的两行),并且使用bound线程,则多线程快过单线程。但其他操作,包括将map改成map<string, int>;,结果都是单线程快过多线程。\r\n真是晕呀,谁能指点一下???\r\n\r\n#include <string>;\r\n#include <iostream>;\r\n#include <utility>;\r\n#include <map>;\r\n#include <unistd.h>;\r\n#include <pthread.h>;\r\n\r\nusing namespace std;\r\n\r\n\r\nvoid* thread_main(void *arg)\r\n{\r\n int n = *(int*)arg;\r\n\r\n map<int, int>; m;\r\n\r\n int i;\r\n\r\n for (i = 0; i < n; ++i) {\r\n#if 0\r\n m.insert(make_pair(i, i));\r\n m.erase(i);\r\n#endif\r\n// char tmp[20];\r\n// snprintf(tmp, 20, \"%s\", \"this is a test!!!\" ;\r\n int tmp = atoi(\"12345\" ;\r\n// cout << i << endl;\r\n }\r\n\r\n gettimeofday(&tv2, &tz2);\r\n\r\n return 0;\r\n}\r\n\r\n\r\nint main(int argc, char *argv[])\r\n{\r\n int n = atoi(argv[1]);\r\n int k = atoi(argv[2]);\r\n\r\n pthread_t t_id[100];\r\n int i;\r\n struct timeval tv1, tv2;\r\n struct timezone tz1, tz2;\r\n\r\n gettimeofday(&tv1, &tz1);\r\n\r\n for (i = 0; i < n; ++i)\r\n {\r\n pthread_attr_t t_attr;\r\n pthread_attr_init(&t_attr);\r\n pthread_attr_setscope(&t_attr, PTHREAD_SCOPE_SYSTEM);\r\n pthread_create(&t_id, &t_attr,thread_main, (void*)&k);\r\n }\r\n int j;\r\n for(j = 0; j < n; ++j)\r\n pthread_join(t_id[j], 0);\r\n\r\n gettimeofday(&tv2, &tz2);\r\n\r\n long interval = (tv2.tv_sec - tv1.tv_sec) * 1000000 + (tv2.tv_usec - tv1.tv_usec);\r\n cout << \"DURATION: \" << ((double)interval) << endl;\r\n} |
|