Процеси и нишки

Лектори
Георги Пенков gpenkov@phreedom.org
Марин Маринов mmarinov@phreedom.org
Петър Пенчев roam@ringlet.net
Николай Бачийски nbachiyski@developer.bg
Уеб страница
http://perl.phreedom.org/

Процеси и нишки (1/3)

Процеси и нишки (2/3)

Процеси и нишки (3/3)

Многопроцесен модел, времеделене

„Роднински отношения“ между процеси

Създаване на нов процес

Обработка на завършил процес (1/2)

Обработка на завършил процес (2/2)

Пример: fork(), waitpid()

  • my $pid; if (!defined($pid == fork()) { die "Could not fork: $!\n"; } elsif ($pid == 0) { print "This is the child process\n"; sleep(5); print "Exiting.\n"; exit(1); } # Parent process do { $kid = waitpid -1, WNOHANG; } until ($kid > 0); print "Process $kid exited with status $?\n";
  • Предаване на данни между процеси

    Пример: IO::Handle за IPC

  • use IO::Handle; my $pid, $reader, $parent2child, $child2parent; $parent2child = new IO::Handle; $child2parent = new IO::Handle; $parent2child->autoflush(1); $child2parent->autoflush(1); if (!($pid = fork())) { die "Could not fork: $!\n"; } elsif ($pid == 0) { # Child process print "$$ starting\n"; # Wait until the parent tells us what to do $data = <$parent2child>; print "$$ received $data\n"; print $child2parent "OK"; # Still the child process print "$$ exiting\n"; exit(0); } # Parent process print "$$ parent process continuing\n"; print $parent2child "REQUEST"; print "$$ waiting for the child's response\n"; $data = $child2parent; print "$$ received $data from the child\n"; exit(0);
  • Какво е thread

    Threading модели

    Threading модели в Perl

  • С помощта на модула Config и проверка на $Config{useithreads} може да получите информация за това дали могат да се ползват нишки.
  • Създаване на нишка

    Изчакване на нишка

    Изоставяне на thread

    Споделяне на данни (sharing)

    Race Conditions

    Заключване с lock

    Потенциален пропблем — deadlock

    Предаване на данни през опашки

    Семафори

    Преглед на всички нишки

    Сравнение fork() — ithreads

    Сравнение fork() — ithreads

    Използвани източници