2014-01-22 35 views
1
for(i=0; i<5; i++) 
{ 
    method1(); 
} 

sub method1() 
    { 
      // here do something 
    } 

這裏我在for循環中調用了method1子例程。在這裏,我想調用這個method1子程序(並行),而不用等待前一次調用的結果。怎麼做 ?除了線程還有其他方法嗎?如何並行運行子程序?

+2

你可以使用fork或thread來做到這一點。 –

+1

http://stackoverflow.com/a/16475586/223226 –

+0

如果我把子程序寫成單獨的腳本,那麼通過調用另一個腳本以及如何做到這一點(Exec和system),可以滿足上述概念? –

回答

6

主題:

use threads; 

for (0..4) { 
    async { f() }; 
} 

$_->join() for threads->list; 

流程:

use forks; 

for (0..4) { 
    async { f() }; 
} 

$_->join() for forks->list; 

科羅線程:

use Coro; 

my @threads; 
for (0..4) { 
    push @threads, async { f() }; 
} 

$_->join() for @threads; 

科羅提供coope這是一個多任務系統,所以其他線程只有在當前的線程被阻塞等待事件時纔有機會執行。

+0

已添加到答案。 – ikegami