[問題] 請問一下Server-Client的問題

看板Perl作者 (LPI Course Ongoing)時間16年前 (2009/04/13 19:42), 編輯推噓9(901)
留言10則, 2人參與, 最新討論串1/3 (看更多)
其實我是完完全全的新手 底下只要看的到的程式都是改編自版主的XD (版主歹是 喔 囧) 話說我想要做的是這樣 Server提供一個可寫入的陣列(整數~size=10) Client可以讀也可以寫 但是一次只能有一個寫入~讀取可以有多個 其實我也不知道我在寫啥XD 但是東拼西湊出來的東西如下 但是似乎就是沒有辦法去確認Server是不是正確的讀取了Client的東西 還是只是client print自己的array :( #!/usr/bin/perl #Server use threads; use IO::Socket; my $server = IO::Socket::INET->new( LocalPort => 8088, Type => SOCK_STREAM, Listen => 32, Reuse =>1 ); my @array = (); while(my $client = $server->accept() ) { threads->create( "client_handler", $client); } sub client_handler { my $client = shift; while(<$client>) { push( @array, $_ ); } print $client foreach( @array ); $client->shutdown(1); $client->close(); } #!/usr/bin/perl #Client use IO::Socket; my $client = IO::Socket::INET->new( PeerAddr => "127.0.0.1", PeerPort => 8088); my @array = (); my $element = 0; while( $element != 10 ){ for ( 1 .. 10 ) { push( @array, $element ); } $element++; } print "$_\n" foreach( @array ); print $client foreach( @array ); while(<$client>) { print;} $client->close(); 因為完全不會寫程式 所以這段話有點不懂 Each read/write thread should perform a busy loop incrementing a local variable from 0 to 2,000,000 before actually doing the reading or the writing of the shared array. Make sure that you put this loop inside the critical section of the thread. This simulates longer service and will therefore introduce more contention for the resource. busy loop 是啥米?? 好像是很重要的一段話 但是怎麼也看不懂:( 要儲存離開又不自覺的按下esc 然後 : 然後 wq! 了 那ㄟ安ㄋㄟ?! -- -- ※ 發信站: 批踢踢實業坊(ptt.cc) ◆ From: 211.72.195.107

04/13 19:46, , 1F
busy loop就是那個迴圈會一直跑 每次跑得過程不間隔
04/13 19:46, 1F

04/13 19:46, , 2F
這樣會造成那個thread耗用cpu 100% 你可能要做sleep動作
04/13 19:46, 2F

04/13 19:47, , 3F
不過原本read/write其實是block-I/O 所以你不用管他
04/13 19:47, 3F

04/13 19:48, , 4F
理論上你資料有送過去 不過目前我還沒時間幫你跑一下
04/13 19:48, 4F

04/13 19:48, , 5F
等其他板友看看唄^^ 要不然就等明天我比較有空哩
04/13 19:48, 5F

04/13 19:49, , 6F
另外他是在講threads要做臨界區間的保護避免資源競爭
04/13 19:49, 6F

04/13 19:51, , 7F
你應該把 my @array = (); 改 my @array : shared = ();
04/13 19:51, 7F

04/13 19:51, , 8F
這樣基本上這個陣列就可以同時多個client thread存取了
04/13 19:51, 8F

04/13 19:52, , 9F
記得 use threads::shared; 這樣才可以使用喔 :)
04/13 19:52, 9F

04/13 19:59, , 10F
謝版主隆恩~~~~ ^_^
04/13 19:59, 10F
文章代碼(AID): #19uoKUyL (Perl)
文章代碼(AID): #19uoKUyL (Perl)