Тут все просто, когда Coro-thread'у нужно выполнить какую-либо операцию и
она не может быть сделана без блокировки процесса, Coro выделяет для этого
действия отдельный C-thread, который будет выполняться паралельно, в
результате чего остальные Coro-thread'ы и Coro-scheduler могут спокойно
продолжать работу, пока выполняется эта блокирующая операция.

Такого очень сложно достичь в любом event-loop'е.

23 мая 2012 г., 22:05 пользователь Alexandr Gomoliako <[email protected]>написал:

> >> Ясно, ну он пишет, что у него там в каждом приложении есть по
> >> несколько C threads и сколько насоздаете perl threads. Т.е. здесь они
> >> просто два разных вида корутин или нет? Надо смотреть реализацию.
> >
> > вне контекста я не понял цитату, что он там имеет в виду, но perl
> threads это
> > просто threads, те самые которые создаются
> > thread->create/beginthread/pthread_create etc а C threads это видимо и
> есть
> > корутины. Они друг друга не исключают, несколько корутин может быть в
> одном
> > треде.
>
> "While the coro thread is running it also might get assigned a C-level
> thread, or the C-level thread might be unassigned from it, as the Coro
> runtime wishes. A C-level thread needs to be assigned when your perl
> thread calls into some C-level function and that function in turn
> calls perl and perl then wants to switch coroutines."
>
> В общем судя по этому, perl threads -- это те которые создаются через
> async {} или new Coro, он их еще называет coroutines, чем они и
> являются, а C threads приклеиваются к ним как дополнение, чтобы
> переключаться по нативному коду, которые на самом деле C coroutines
> (setjpm/longjpm и другие способы как раз для этого).
> --
> Moscow.pm mailing list
> [email protected] | http://moscow.pm.org
>



-- 
С уважением,
Никита Зубков
-- 
Moscow.pm mailing list
[email protected] | http://moscow.pm.org

Ответить