マルチスレッドで動くサーバについて
Posted: 2010年11月23日(火) 01:03
PCがマルチコアなので、マルチスレッドのほうが効率がいいと
思ったのですが、CPU使用率が60%を上回る結果になりました。
Select()を用いた方法より格段にCPUを圧迫し、レスポンスも
悪くなっているような気がします。
単純にクライアントがきたら、もう片方の
ソケットに書き込む処理をするスレッドを起こす簡単なサーバです。
設計が根本的におかしいでしょうか?
それともスレッドの作り方や扱い方がまずいのでしょうか?
==================ここから============================
DWORD WINAPI Thread1(LPVOID lpvoid ) {
char buf1[4000];
while(1){
memset(buf1,'\0',4000);
int ret1;
Sleep(1);
ret1=recv(sock1, buf1,4000, 0);
send(sock2,buf1,ret1, 0);
}
ExitThread(TRUE);
}
DWORD WINAPI Thread2(LPVOID lpvoid ) {
char buf2[4000];
while(1){
memset(buf2,'\0',4000);
int ret2;
Sleep(1);
ret2=recv(sock2, buf2,4000, 0);
send(sock1,buf2,ret2, 0);
}
ExitThread(TRUE);
}
======================================================
思ったのですが、CPU使用率が60%を上回る結果になりました。
Select()を用いた方法より格段にCPUを圧迫し、レスポンスも
悪くなっているような気がします。
単純にクライアントがきたら、もう片方の
ソケットに書き込む処理をするスレッドを起こす簡単なサーバです。
設計が根本的におかしいでしょうか?
それともスレッドの作り方や扱い方がまずいのでしょうか?
==================ここから============================
DWORD WINAPI Thread1(LPVOID lpvoid ) {
char buf1[4000];
while(1){
memset(buf1,'\0',4000);
int ret1;
Sleep(1);
ret1=recv(sock1, buf1,4000, 0);
send(sock2,buf1,ret1, 0);
}
ExitThread(TRUE);
}
DWORD WINAPI Thread2(LPVOID lpvoid ) {
char buf2[4000];
while(1){
memset(buf2,'\0',4000);
int ret2;
Sleep(1);
ret2=recv(sock2, buf2,4000, 0);
send(sock1,buf2,ret2, 0);
}
ExitThread(TRUE);
}
======================================================