Bazı nesnelerin bir işlevi içinde, paralel olarak çalışabilen ve benim için işleri hızlandıran birkaç kod bloğum var. ,perl'de basit paralel işleme
my $is_a_done = parallelize {
# block a, do some work
return 1;
};
my $is_b_done = parallelize {
# block b, do some work
return 1;
};
my $is_c_done = parallelize {
# block c depends on a so let's wait (block)
if ($is_a_done) {
# do some work
};
return 1;
};
my $is_d_done = parallelize {
# block d, do some work
return 1;
};
if ($is_a_done && $is_b_done && $is_c_done && $is_d_done) {
# just wait for all to finish before the function returns
}
İlk ben ipler engellemek ve önceki iplik beklemek beklemek if
kullanmak dikkat edin:
I (tüm bu işlevin bir bedende olduğu) şu şekilde subs::parallel
kullanarak çalıştı Gerekli olduğunda bitir (daha iyi bir fikir? if
oldukça çirkin ...).
İkincisi, bir hata alıyorum: Daha önce subs::parallel
görülen, ama senin için iplik işlemesi tüm işi var vermediyseniz
Thread already joined at /usr/local/share/perl/5.10.1/subs/parallel.pm line 259.
Perl exited with active threads:
1 running and unjoined
-1 finished and unjoined
3 running and detached
İlginç. Sorun şu ki, '$ is_a_done', 'subs :: parallel' belgesinin bir yanlış kullanım/ihtarı olmak üzere iki farklı iş parçacığında kontrol edilir: * Başka bir evre/paralelleştirilmiş alt yordamları, diğer paralelleştirilmiş alt yordamlardan önceki dönüş değerlerine geçmemelisiniz. onların değerlerini okuyorlardı. * Ancak, “subs :: parallel” nin 0.8 sürümünde * açıkça * belgelenecek bir uyarı bulamadım. – pilcrow