关于Linux的线程和Windows的线程比较
前段时间,在该版有位兄弟发了一篇贴子:http://community.csdn.net/Expert/TopicView3.asp?id=5185751
在该贴子中,楼主在设计网络服务端程序时“为了稳定,不考虑多线程。”
我“对于楼主这句话表示怀疑
如果设计得当,线程一样很稳定,而且性能绝对比多进程要好得多”
楼主随后找出一篇文章来证明他的观点,说linux的线程如何低效。
需要指出的是,楼主给出的那篇文章抱的是老黄历,是linux2.4及以前版本的内核对线程的支持效率不高。
linux的技术是在不断的发展中的,在2.6的内核中对thread的支持也有相当大的改进,最新的线程实现NPTL效率相当高,不信的可以做个验证。
windows xp中执行如下代码,执行结果为:672毫秒左右
我的是windows xp,release版,优化为最快速度
#include <windows.h>
#include <stdio.h>
DWORD WINAPI ThreadFunc( LPVOID *param )
{
return 0;
}
int main()
{
HANDLE hThread;
int i;
DWORD dwBegin, dwEnd;
dwBegin = GetTickCount();
for ( i = 0; i < 10000; ++i ) {
hThread = CreateThread( NULL, 0, ThreadFunc, NULL, 0, NULL );
WaitForSingleObject( hThread, INFINITE );
CloseHandle( hThread );
}
dwEnd = GetTickCount();
printf( "time=%d\n", dwEnd - dwBegin );
return 0;
}
Linux(2.6内核,NPTL线程,我的是FC6)中执行以下代码,执行结果为:275毫秒左右
#include <pthread.h>
#include <stdio.h>
#include <sys/time.h>
void* ThreadFunc( void *param )
{
return NULL;
}
int main()
{
int i;
struct timeval tv1, tv2;
pthread_t tid;
gettimeofday( &tv1, NULL );
for ( i = 0; i < 10000; i++ ) {
pthread_create( &tid, NULL, ThreadFunc, NULL );
pthread_join( tid, NULL );
}
gettimeofday( &tv2, NULL );
printf( "time=%d\n", (tv2.tv_sec-tv1.tv_sec)*1000 + tv2.tv_usec/1000-tv1.tv_usec/1000 );
return 0;
}
各位有条件的请在同一台电脑上测试看看结果如何。