Пытаюсь разобраться с Coro::Handle.
Нужно параллельно/асинхронно читать два файла.
Вот минимальный проблемный код:
x1#!/usr/bin/perl
2
3use ;
4use ;
5
6use ;
7use :: ;
8
9my $coro_1 = {
10
11open my $fh, '<', "/etc/passwd" or die "$!";
12
13$fh = $fh;
14
15for ( 1 .. 2 ) {
16print "coro_1 start\n";
17
18my $result = $fh->readline();
19
20print "coro_1 finish: " . length($result) . "\n";
21}
22};
23
24my $coro_2 = {
25
26open my $fh, '<', "/etc/passwd" or die "$!";
27
28$fh = $fh;
29
30for ( 1 .. 2 ) {
31print " coro_2 start\n";
32
33my $result = $fh->readline();
34
35print " coro_2 finish: " . length($result) . "\n";
36}
37};
38
39$coro_1->join;
40$coro_2->join;
41
42print "END\n";
Здесь создаются два треда, в каждом построчно читается файл. Я понимаю так - при каждом вызове readline управление должно передаваться в другой тред. Соответственно, работать треды должны поочередно.
Но у меня сначала отрабатывает один тред, потом другой. Т.е. такое ощущение, что readline блокируется и не передает управление в другой тред.
Вот вывод:
91
2: 32
3
4: 48
5
6: 32
7
8: 48
9END
Хорошо видно, что сначала отработал первый тред (левая колонка), потом второй тред (правая колонка).
А вот как должно бы быть (если я ничего не напутал):
91
2
3: 32
4
5: 32
6
7: 48
8: 48
9END
Почему у меня работает не параллельно/асинхронно? Что я упустил?
_italic_
→ italic
**bold**
→ bold
[PP](http://pragmaticperl.com)
→
<http://pragmaticperl.com>
→
module:Plack
→
release:URI
→
author:VTI
→
`my $foo = 'bar'`
```
my $multi;
$line;
```