Perl запускает одновременные процедуры - PullRequest
1 голос
/ 01 июня 2010

Я пытаюсь запустить две подпрограммы одновременно в perl. Как мне лучше всего это сделать? Например:

sub 1{
        print "im running";
     }

sub 2{
        print "o hey im running too";
     }

Как я могу выполнить обе процедуры одновременно?

Ответы [ 2 ]

7 голосов
/ 01 июня 2010

Использование threads.

use strict;
use warnings;
use threads;

sub first {

    my $counter = shift;
    print "I'm running\n" while $counter--;
    return;
}

sub second {

    my $counter = shift;
    print "And I'm running too!\n" while $counter--;
    return;
}

my $firstThread = threads->create(\&first,15);   # Prints "I'm running" 15 times
my $secondThread = threads->create(\&second,15); # Prints "And I'm running too!" 
                                                 # ... 15 times also

$_->join() foreach ( $firstThread, $secondThread );  # Cleans up thread upon exit

На что следует обратить внимание, так это на то, как печать чередуется нерегулярно. Не пытайтесь основывать какие-либо расчеты на ложной предпосылке, что порядок выполнения корректен.

Потоки Perl могут взаимодействовать, используя:

  • общие переменные (use threads::shared;)
  • очередей (use Thread::Queue;)
  • семафоры (use Thread::Semaphore;)

См. perlthrtut для получения дополнительной информации и отличного учебника.

0 голосов
/ 01 июня 2010

На самом деле я не осознавал, что Perl может сделать это, но вам нужна поддержка многопоточности:

http://search.cpan.org/perldoc?threads

Либо так, либо ответвление двух процессов, но было бы немного сложнее изолировать вызов подпрограммы.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...