我在linux上使用Perl,我的内存使用率一直在上升,我相信是因为以前运行的线程没有被终止/连接。
我想我需要以某种方式通知已经结束/运行的线程,然后分离
它/它们会被自动清理,让我恢复记忆。。。
我试过return();使用$thrúList->join();&$thr戋List->detach();但是我的gui在使用join时很久都没有显示,而且mem问题似乎是
在分离中依然存在。。。任何帮助。。。

$mw->repeat(100, sub { # shared var handler/pivoting-point !?

while (defined(my $command = $q->dequeue_nb())) { #???
# to update a statusbar's text
        $text->delete('0.0', "end");
        $text->insert('0.0', $command);
  $indicatorbar->value($val); # to update a ProgressBar's value to $val
  $mw->update();

    for ( @threadids ) { # @threadids is a shared array containing thread ids
    # that is to say I have got the info I wanted from a thread and pushed its id into the above @threadids array.
    print "I want to now kill or join the thread with id:  $_\n";
        #$thrWithId->detach();
        #$thrWithId->join();
    # then delete that id from the array
    # delete $threadids[elWithThatIdInIt];


    # as this seems to be in a repeat(100, sub... too, there are problems??!
    # locks maybe?!?
    # for ( @threadids ) if its not empty?!?
        }
   } # end of while
}); # end of sub

# Some worker... that works with the above handler/piviot me thinks#???
async {
   for (;;) {
 sleep(0.1);
 $q->enqueue($StatusLabel);
   }
 }->detach();

我已经在这里上传了我的完整代码(http://cid-99cdb89630050fff.office.live.com/browse.aspx/.Public)如果需要的话,它在Boxy.zip中。。。
首先很抱歉在此回复,但我丢失了允许编辑的cookie。。。
非常感谢gangabass,这看起来是一个很好的信息,我将不得不花一些时间在它上,但至少它看起来像是其他人在问同样的问题。。。我担心我把事情弄得一团糟。
谢谢你们。。。

最佳答案

听起来你的加入很成功,但进展很慢?
perl中的线程不是轻量级的。创建和连接线程需要大量内存和时间。
如果您的任务允许,那么最好让线程继续运行并给它们额外的工作,而不是结束它们并在以后启动新线程。Thread::Queue可以帮上忙。也就是说,除非你是在Windows上,否则没有很多意义去做,而不是用叉子和Parallel::ForkManager

08-28 10:51