亚洲av成人无遮挡网站在线观看,少妇性bbb搡bbb爽爽爽,亚洲av日韩精品久久久久久,兔费看少妇性l交大片免费,无码少妇一区二区三区

  免費(fèi)注冊(cè) 查看新帖 |

Chinaunix

  平臺(tái) 論壇 博客 文庫
最近訪問板塊 發(fā)新帖
查看: 4581 | 回復(fù): 7
打印 上一主題 下一主題

子線程中執(zhí)行sleep(5),主線程也跟著sleep? [復(fù)制鏈接]

論壇徽章:
0
跳轉(zhuǎn)到指定樓層
1 [收藏(0)] [報(bào)告]
發(fā)表于 2011-07-17 15:19 |只看該作者 |倒序?yàn)g覽
本帖最后由 heidern 于 2011-07-17 22:28 編輯

最近在研究多線程,想寫個(gè)服務(wù)器端程序.
  1. #!/usr/local/perl5.12/bin/perl
  2. use strict;
  3. use warnings;
  4. use threads (
  5.         'exit' => 'threads_only',
  6. );
  7. use IO::Socket;
  8. use Data::Dumper;

  9. $|=1;
  10. my $serverFD=IO::Socket::INET->new(
  11.         LocalPort       =>      12340,
  12.         Type            =>      SOCK_STREAM,
  13.         Listen          =>      SOMAXCONN,
  14.         Reuse           =>      1
  15. ) || die $!;

  16. # create a thread to monitor the threads
  17. threads->create(\&threadMonitor);

  18. # when a connect accepted , create a thread to process it
  19. while (1) {
  20.         threads->create(\&talk,$serverFD->accept());
  21. }

  22. sub talk
  23. {
  24.         my ($clientFD,$clientInfo)=@_;
  25.         my ($clientport,$clientaddr) = unpack_sockaddr_in($clientInfo);
  26.         my $clientip = inet_ntoa($clientaddr);
  27.         my $tid = threads->self->tid();
  28.         print "Client From => $clientip\:$clientport My number is $tid\n";
  29.         while (<$clientFD>) {
  30.                 print "client $tid from $clientip say: $_";
  31.                 chomp($_);
  32.                 if ($_ =~ m/hello/i) {
  33.                         print $clientFD "tid=$tid,Hello Client from $clientip\n";
  34.                 } elsif ($_ =~ m/bye/i) {
  35.                         print $clientFD "tid=$tid,Bye Bye Client from $clientip\n";
  36.                         close $clientFD;
  37.                         last;
  38.                 }
  39.         }
  40.         threads->self->detach();
  41. }

  42. sub threadMonitor
  43. {
  44.         print "Monitor Thread Created!!\n";
  45.         while(1) {
  46.                 my @ths_r=threads->list(threads::running);
  47.                 my $threadNums_running=$#ths_r+1;
  48.                 my @ths_j=threads->list(threads::joinable);
  49.                 my $threadNums_joinable=$#ths_j+1;
  50.                 print "There are $threadNums_running threads running and $threadNums_joinable threads joinable\n";
  51.                 sleep(5);
  52.         }
  53.         threads->self->detach();
  54. }

復(fù)制代碼
當(dāng)threadMonitor這個(gè)線程sleep的時(shí)候,主線程也會(huì)sleep,為什么?

另:我的測(cè)試方法是,先運(yùn)行這個(gè)腳本,然后開另外一個(gè)終端執(zhí)行下面的命令:
while(true);do echo "hello" |nc localhost 12340;done
剛開始執(zhí)行的時(shí)候還不錯(cuò),但server端執(zhí)行到sleep那的時(shí)候客戶端就會(huì)出現(xiàn)被阻塞的情況,5秒后就繼續(xù)了

論壇徽章:
1
2015年辭舊歲徽章
日期:2015-03-03 16:54:15
2 [報(bào)告]
發(fā)表于 2011-07-17 18:20 |只看該作者
怎么就都這么迷信多線程呢。

論壇徽章:
0
3 [報(bào)告]
發(fā)表于 2011-07-17 20:54 |只看該作者
一開始就該detach吧,要不主線程會(huì)等待子線程完成之后才繼續(xù)。 (我也不是很清楚,你自己試試)

論壇徽章:
0
4 [報(bào)告]
發(fā)表于 2011-07-17 20:54 |只看該作者
一開始就該detach吧,要不主線程會(huì)等待子線程完成之后才繼續(xù)。 (我也不是很清楚,你自己試試)

論壇徽章:
0
5 [報(bào)告]
發(fā)表于 2011-07-17 21:02 |只看該作者
試了,沒用..

論壇徽章:
0
6 [報(bào)告]
發(fā)表于 2011-07-17 22:10 |只看該作者
我也裝了個(gè)perl試了下, 沒發(fā)現(xiàn)主線程被阻塞。我把sleep調(diào)到10了, 新客戶端連過來的時(shí)候立刻就有反應(yīng)。
windows 平臺(tái)下

論壇徽章:
0
7 [報(bào)告]
發(fā)表于 2011-07-17 22:30 |只看該作者
我也裝了個(gè)perl試了下, 沒發(fā)現(xiàn)主線程被阻塞。我把sleep調(diào)到10了, 新客戶端連過來的時(shí)候立刻就有反應(yīng)。
...
cyril851122 發(fā)表于 2011-07-17 22:10



    我的系統(tǒng)是centos 5.6 64位的,
    我在原帖補(bǔ)充了我的測(cè)試方法.

論壇徽章:
0
8 [報(bào)告]
發(fā)表于 2012-02-20 21:21 |只看該作者
回復(fù) 1# heidern

測(cè)試程序有問題。
    實(shí)際你只啟動(dòng)了一個(gè) nc localhost 12340 進(jìn)程

試試下邊的
while :; do echo -e 'hello' | nc localhost 12340&; done
您需要登錄后才可以回帖 登錄 | 注冊(cè)

本版積分規(guī)則 發(fā)表回復(fù)

  

北京盛拓優(yōu)訊信息技術(shù)有限公司. 版權(quán)所有 京ICP備16024965號(hào)-6 北京市公安局海淀分局網(wǎng)監(jiān)中心備案編號(hào):11010802020122 niuxiaotong@pcpop.com 17352615567
未成年舉報(bào)專區(qū)
中國互聯(lián)網(wǎng)協(xié)會(huì)會(huì)員  聯(lián)系我們:huangweiwei@itpub.net
感謝所有關(guān)心和支持過ChinaUnix的朋友們 轉(zhuǎn)載本站內(nèi)容請(qǐng)注明原作者名及出處

清除 Cookies - ChinaUnix - Archiver - WAP - TOP