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

  免費注冊 查看新帖 |

Chinaunix

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

Thread::Queue()中 dequeue多個元素時的問題 [復制鏈接]

論壇徽章:
0
跳轉到指定樓層
1 [收藏(0)] [報告]
發(fā)表于 2012-05-18 16:04 |只看該作者 |倒序瀏覽
我開啟一個線程(生產(chǎn)者)從文件中讀取數(shù)據(jù),并將內(nèi)容enqueue()到隊列中。

同時開始N個線程對線程隊列中的數(shù)據(jù)進行任務處理,現(xiàn)在問題是我希望一次dequeue()多條記錄,比如dequeue(100),但是在這種情況下,如果隊列中的元素不足100個的話,就會造成阻塞,甚至在最后隊列將要處理完畢只剩幾個元素的時候,就會一直阻塞在那里了。但是又不能使用dequeue_nb(),因為有可能生產(chǎn)者還沒有enqueue足夠的數(shù)據(jù)進去。怎么樣對這種情況進行更好的處理呢?

代碼如下:
  1. #!/usr/bin/perl
  2. use strict;
  3. use threads 1.82;
  4. use threads::shared;
  5. use Thread::Queue;

  6. my $queue = Thread::Queue->new();
  7. $queue->enqueue(1..9999);

  8. my @threads = ();
  9. foreach (1,2,3,4,5) {
  10.     push @threads,threads->create("worker");
  11. }

  12. foreach (1,2,3,4,5) {
  13.     $queue->enqueue(undef);
  14. }

  15. while (1) {
  16.     foreach (@threads) {
  17.         my $num = threads->list();
  18.         print "threads total: $num\n";
  19.         if ($_->is_running()) {
  20.             sleep 1;
  21.             next;
  22.         }  

  23.         if ($_->is_joinable()) {
  24.             $_->join();
  25.         }  
  26.    
  27.         sleep 1;
  28.     }  
  29. }


  30. sub worker {
  31.     while (my @DataElement = $queue->dequeue(100)) {
  32.         my $tid = threads->tid();
  33.         print "Threads ID:$tid\t@DataElement\n";
  34.     }
  35. }
復制代碼

論壇徽章:
0
2 [報告]
發(fā)表于 2012-05-18 16:47 |只看該作者
這段是做什么用的?
foreach (1,2,3,4,5) {
    $queue->enqueue(undef);
}

論壇徽章:
0
3 [報告]
發(fā)表于 2012-05-18 17:26 |只看該作者
回復 2# royalzhang


    剛開始我是每次dequeue()一個元素的。你提到的那段,作用是結束工作線程,因為工作線程每次dequeue()一個元素,遇到undef就退出while循環(huán)并結束整個線程的工作了。

    現(xiàn)在我每次dequeue(100),你提到的那段就沒什么用處了。

論壇徽章:
0
4 [報告]
發(fā)表于 2012-05-18 17:51 |只看該作者
回復 3# scutdk


   哦,是的。當每次dequeue一個的時候工作的很好,dequeue多個的時候不行。不知道此模塊內(nèi)部是怎么判斷的。填進去多個undef也不行。
您需要登錄后才可以回帖 登錄 | 注冊

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

  

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

清除 Cookies - ChinaUnix - Archiver - WAP - TOP