nodeny:docs:kernel

Модулі ядра

nokernel.pl – невеликий файл, що запускає модулі ядра.

Кожен модуль повинен мати підпрограму start, яка приймає 2 параметри:

  • Прапор запущено модуль в монопольному режимі
  • конфіг

Створимо конфіг для модуля kernel:: test. Обов'язковий параметр run вказує, чи буде модуль запускатися автоматично.

Файл kernel/test.cfg

run => 0

Файл kernel/test.pm

package kernel::test;
use strict;
use Debug;
our @ISA = qw{kernel};

sub start
{
     my(undef, $single, $config) = @_;
     tolog 'Тестовий модуль запущено. Він нічого не робить;
}
1;

Тут $single буде встановлено у випадку, коли модуль запущено в монопольному режимі: perl nokernel.pl -m=test. У монопольному режимі ядро запускає лише один модуль. Це може знадобитися у разі:

  • У модулі присутні блокуючі операції, великі таймаути і т.д. Поки модуль виконуватиме тривалу операцію, решта буде в очікуванні.
  • модуль використовують потоки, в яких задіяні малопотокові пакети, зокрема Db.
sub start
{
     my(undef, $single, $config) = @_;

     nod::tasks->new(
         task => sub{ main($config) },
         period => 5,
         first_period => $single? 0 : 3,
     );
}

sub main
{
     my($config) = @_;
     tolog '.';
}

Модуль кожні 5 секунд записує в балку (при запуску nokernel -d -m=test) або виводить на екран крапку. nod::tasks→new створює завдання, яке запускатиме кожні 5 секунд підпрограму main. При монопольному запуску перше виконання main буде зроблено відразу ж, інакше через 3 секунди (first_period = 3).

Цей сайт використовує кукі. Перебуваючи тут, ви погоджуєтеся з їх зберіганням на вашому комп'ютері. Також ви підтверджуєте, що прочитали і зрозуміли нашу Політику конфіденційності. Якщо ви не згодні - покиньте сайт.Більше інформації про куки
  • nodeny/docs/kernel.txt
  • Востаннє змінено: 25/01/2023 22:11
  • повз Method