Тут все просто, когда 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
