Обновлено 26.01.2009 Автор: Administrator
В эпоху повсеместного распространения многоядерных процессоров интересно узнать, что же для многопоточного программирования есть в Perl. Не претендуя на самое-правильное-решение, приведу простой работающий шаблон для построения многопоточных скриптов Perl на платформе Win32.
Для биоинформатиков - многопоточность уже реализована в BLAST - ссылка.
# use subs::parallel;
sub np{
my ($arg1, $arg2) = @_;
for($i=0;$i<$arg1;$i++) {
$t=$i*2;
$t=$t/2;
# open (FORGET, ">>forget");
# print FORGET "bar - $arg2\n";
# close(FORGET);
}
}
sub bar{
my ($arg1, $arg2) = @_;
for($i=0;$i<$arg1;$i++) {
$t=$i*2;
$t=$t/2;
# open (FORGET, ">>forget");
# print FORGET "bar - $arg2\n";
# close(FORGET);
}
}
sub foo {
my ($arg1, $arg2) = @_;
for($j=0;$j<$arg1;$j++) {
$t=$i*2;
$t=$t/2;
#
# open (FORGET, ">>forget");
# print FORGET "foo - $arg2\n";
# close(FORGET);
}
}
# parallelize_sub('bar'); # subroutine named bar now runs in parallel
# parallelize_sub('foo');
open (FORGET, ">forget");
print FORGET "start\n";
close(FORGET);
np(20000000,1);
# my $foo = foo(10000000,1); # returns immediately
# my $bar = bar(10000000,2); # also returns immediately
# if ($foo == $bar) { # now it might block waiting for both to finish
# ##
# }
print "work is finished";
Следующая > |
---|