SlideShare a Scribd company logo
Coro - реальные потоки в
           Perl




                   Артемьев Артём
Event-loop
- цикл, который за каждую итерацию проверяет
  очередь на наличие каких-либо событий.

По возникновению события, контекст этого
 события передаётся следящим за событием
 обработчикам.

В Perl существует много разных реализаций
  event-loop'ов:
EV, Event, Glib, Tk, Perl, Event::Lib...
AnyEvent

- framework, представляющий собой
   абстрактный слой над всеми event-loop
   реализациями.

Это значит, что Вы можете писать Ваше event-
 driven приложение используя абстракцию
 AnyEvent, расположенную над любым из
 доступных на данной системе event-loop.
Coro – что это?
”Coro” от ”coroutine” - ”сопрограмма”. В основе
  лежит принцип кооперативной
  многопоточности.

В процессе работы два потока должны
  взаимодействовать между собой и давать
  поработать друг другу, когда это будет
  необходимо.

Каждый поток работает с одним
 пространством имён. То есть данные
 являются общими для всех потоков.
Coro – как это?

use Coro;
                        Выведет:
async {                  main 1
   print "async 1n";    async 1
   cede;                 main 2
   print "async 2n";    async 2
};
                        cede - аналог yield
print "main 1n";
cede;
print "main 2n";
cede;
Coro – основные компоненты
Coro::AIO       truly asynchronous file and directory I/O
Coro::AnyEvent integrate threads into AnyEvent
Coro::Channel message queues
Coro::EV       do events the coro-way, with EV
Coro::Event do events the coro-way, with Event
Coro::Handle         non-blocking I/O with a blocking
    interface.
Coro::Semaphore          counting semaphores
Coro::Signal thread signals (binary semaphores)
Coro::Socket        non-blocking socket-I/O
Coro::State first class continuations
Coro::Timertimers and timeouts, independent of any
    event loop
Coro::Util     various utility functions.
...
Threads vs Coro

20


18


16


14


12


10
                       Threads
                       Coro
 8


 6


 4


 2


 0
      Math        IO
Threads vs Coro - различия
            Coro                          Threads
Единая область памяти для      Память для каждого потока
всех потоков.                  выделяется копированием
                               области памяти
                               родительского потока.
Нет необходимости ”шарить”     Необходимо шарить
перменные                      переменные с общими для
                               всех потоков данными
Все Coro-потоки работают в     Interpreter Threads, Для каждого
одном системном потоке.        потока запускается свой Perl
                               интерпретатора.
Принцип коопераивной           Native threads (в Linux),
многопоточности. Передача      Эмулирование потоков(в
управления по необходимости.   Windows)
Threads vs Coro - использование


Coro можно использовать: в сетевых
 приложениях, в приложениях с вводом-
 выводом, в оконных приложениях(в связке с
 GTK, Tk, etc.).

Threads можно использовать где угодно, но
 неприятные ограничения в некоторых
 случаях заставляют от неё отказываться.
Спасибо за внимание.
      Вопросы?

More Related Content

PPTX
Андрей Акиньшин
PPT
Секреты сборки мусора в Java
PPTX
Сервер-агрегатор на python (аля Xscript FEST), Сумин Андрей, Сабуренков Михаи...
PPTX
jPoint2014
PPTX
Developing high load systems using C++
PDF
PPT
Java. Lecture 08. Multithreaded Programming
PDF
Стратегии выполнения тестов в Gradle
Андрей Акиньшин
Секреты сборки мусора в Java
Сервер-агрегатор на python (аля Xscript FEST), Сумин Андрей, Сабуренков Михаи...
jPoint2014
Developing high load systems using C++
Java. Lecture 08. Multithreaded Programming
Стратегии выполнения тестов в Gradle

What's hot (6)

PDF
JIT-компиляция в виртуальной машине Java (HighLoad++ 2013)
PDF
Cборка мусора в Java без пауз (HighLoad++ 2013)
PDF
Немного о кеше
PPTX
Svitla .Net meetup in Kiev, Anzhiiak Oleksii
DOC
Ферапонтов_Резюме
PPTX
Multiprocessor Programming Intro (lecture 2)
JIT-компиляция в виртуальной машине Java (HighLoad++ 2013)
Cборка мусора в Java без пауз (HighLoad++ 2013)
Немного о кеше
Svitla .Net meetup in Kiev, Anzhiiak Oleksii
Ферапонтов_Резюме
Multiprocessor Programming Intro (lecture 2)
Ad

More from Ilya Zelenchuk (6)

PPT
Использование Mojolicious::Plugin::AnyData в тестовом режиме проекта
PPTX
Потоки в перле изнутри
PPTX
Nginx.pm
PDF
Функциональные тесты на Perl
PDF
Perl и SPDY
PPTX
Контрактное программирование
Использование Mojolicious::Plugin::AnyData в тестовом режиме проекта
Потоки в перле изнутри
Nginx.pm
Функциональные тесты на Perl
Perl и SPDY
Контрактное программирование
Ad

Coro - реальные потоки в Perl

  • 1. Coro - реальные потоки в Perl Артемьев Артём
  • 2. Event-loop - цикл, который за каждую итерацию проверяет очередь на наличие каких-либо событий. По возникновению события, контекст этого события передаётся следящим за событием обработчикам. В Perl существует много разных реализаций event-loop'ов: EV, Event, Glib, Tk, Perl, Event::Lib...
  • 3. AnyEvent - framework, представляющий собой абстрактный слой над всеми event-loop реализациями. Это значит, что Вы можете писать Ваше event- driven приложение используя абстракцию AnyEvent, расположенную над любым из доступных на данной системе event-loop.
  • 4. Coro – что это? ”Coro” от ”coroutine” - ”сопрограмма”. В основе лежит принцип кооперативной многопоточности. В процессе работы два потока должны взаимодействовать между собой и давать поработать друг другу, когда это будет необходимо. Каждый поток работает с одним пространством имён. То есть данные являются общими для всех потоков.
  • 5. Coro – как это? use Coro; Выведет: async { main 1 print "async 1n"; async 1 cede; main 2 print "async 2n"; async 2 }; cede - аналог yield print "main 1n"; cede; print "main 2n"; cede;
  • 6. Coro – основные компоненты Coro::AIO truly asynchronous file and directory I/O Coro::AnyEvent integrate threads into AnyEvent Coro::Channel message queues Coro::EV do events the coro-way, with EV Coro::Event do events the coro-way, with Event Coro::Handle non-blocking I/O with a blocking interface. Coro::Semaphore counting semaphores Coro::Signal thread signals (binary semaphores) Coro::Socket non-blocking socket-I/O Coro::State first class continuations Coro::Timertimers and timeouts, independent of any event loop Coro::Util various utility functions. ...
  • 7. Threads vs Coro 20 18 16 14 12 10 Threads Coro 8 6 4 2 0 Math IO
  • 8. Threads vs Coro - различия Coro Threads Единая область памяти для Память для каждого потока всех потоков. выделяется копированием области памяти родительского потока. Нет необходимости ”шарить” Необходимо шарить перменные переменные с общими для всех потоков данными Все Coro-потоки работают в Interpreter Threads, Для каждого одном системном потоке. потока запускается свой Perl интерпретатора. Принцип коопераивной Native threads (в Linux), многопоточности. Передача Эмулирование потоков(в управления по необходимости. Windows)
  • 9. Threads vs Coro - использование Coro можно использовать: в сетевых приложениях, в приложениях с вводом- выводом, в оконных приложениях(в связке с GTK, Tk, etc.). Threads можно использовать где угодно, но неприятные ограничения в некоторых случаях заставляют от неё отказываться.