Модулі ядра
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).