簡體   English   中英

Perl與Java中的多線程

[英]Multi-Threading in Perl vs Java

我是Perl的新手,正在編寫一個需要使用線程的程序。 我已經在Perl中找到了線程功能 ,但是我仍然感到有些困惑。 如本文標題所述,Java可能是最常使用的線程。 我並不是說這是完美的,但是我可以使用Thread類完成工作。

在Java中,我有一個名為startThreads的方法,在該方法中,我創建了線程,然后啟動了它們。 啟動它們之后,有一個while循環正在檢查胎面是否完成。 如果所有線程都已正確退出,則while循環將退出,但如果不是,則while循環將監視哪些線程已超時,然后安全地中斷這些線程並將其關閉標志設置為true。

問題:在Perl中,我想使用與上面所述相同的算法,但是Perl當然有所不同,並且我是Perl的新手。 是否有可能在其他線程正在運行時運行while循環? 怎么做?

您可以使用threads->list()在Perl中實現while循環,但首先應考慮其他方法。

不用等待線程,而是等待結果呢?

此處的基本思想是,您具有從隊列中獲取工作單元並將工作單元的結果(對象或異常)放入輸出隊列的代碼。

啟動幾個線程,等待輸入隊列中的工作單元。 當出現時,運行工作單元並將結果放入輸出隊列。

在您的主代碼中,您只需要將所有N個工作單元放入輸入隊列(確保足夠大)。 之后,您可以等待輸出隊列中的N個輸出,並且不必擔心線程,聯接和異常。

[編輯]您的所有問題都應在http://perldoc.perl.org/perlthrtut.html中回答

在perl中使用線程時要小心。 關於安全訪問共享數據有很多細微差別。 由於大多數Perl代碼不執行線程處理,因此很少有模塊是線程安全的。

閱讀了Michael Slade提供的鏈接后,我發現Cyber​​-Guard Enterprise是正確的。 通過分離線程,主體仍在執行工作。 我還沒有測試過,但是看起來$ thr-> is_running()可以告訴我線程是否還在運行。

這是從提供的URL中獲取的,並顯示了如何使用分離。 perldoc.perl.org/perlthrtut.html?

use threads;
my $thr = threads->create(\&sub1); # Spawn the thread
$thr->detach(); # Now we officially don't care any more
sleep(15); # Let thread run for awhile
sub sub1 {
$a = 0;
while (1) {
$a++;
print("\$a is $a\n");
sleep(1);
}
}

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM