SlideShare a Scribd company logo
1 of 10
Download to read offline
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

What's hot

Ферапонтов_Резюме
Ферапонтов_РезюмеФерапонтов_Резюме
Ферапонтов_Резюме
Oleg Ferapontov
 
Multiprocessor Programming Intro (lecture 2)
Multiprocessor Programming Intro (lecture 2)Multiprocessor Programming Intro (lecture 2)
Multiprocessor Programming Intro (lecture 2)
Dmitry Tsitelov
 

What's hot (6)

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

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

Ivbit erlang презентация
Ivbit   erlang презентацияIvbit   erlang презентация
Ivbit erlang презентация
jskonst
 
Erlang мгновенное просветление
Erlang  мгновенное просветлениеErlang  мгновенное просветление
Erlang мгновенное просветление
Maxim Sokhatsky
 
Tarantool/Silverbox (Юрий Востриков)
Tarantool/Silverbox (Юрий Востриков)Tarantool/Silverbox (Юрий Востриков)
Tarantool/Silverbox (Юрий Востриков)
Ontico
 
что и почему вы должны программировать на Erlang.максим лапшин. зал 4
что и почему вы должны программировать на Erlang.максим лапшин. зал 4что и почему вы должны программировать на Erlang.максим лапшин. зал 4
что и почему вы должны программировать на Erlang.максим лапшин. зал 4
rit2011
 

Similar to Coro - реальные потоки в Perl (20)

Ivbit erlang презентация
Ivbit   erlang презентацияIvbit   erlang презентация
Ivbit erlang презентация
 
Алексей Туля - А нужен ли вам erlang?
Алексей Туля - А нужен ли вам erlang?Алексей Туля - А нужен ли вам erlang?
Алексей Туля - А нужен ли вам erlang?
 
Eventmachine: структура evented-приложений
Eventmachine: структура evented-приложенийEventmachine: структура evented-приложений
Eventmachine: структура evented-приложений
 
Multithreading in JS. Myth or reality?
Multithreading in JS. Myth or reality?Multithreading in JS. Myth or reality?
Multithreading in JS. Myth or reality?
 
Erlang killer features
Erlang killer featuresErlang killer features
Erlang killer features
 
F# - функциональный язык «новой» волны
F# - функциональный  язык «новой» волныF# - функциональный  язык «новой» волны
F# - функциональный язык «новой» волны
 
Макс Лапшин - "EventMachine и evented архитектура"
Макс Лапшин - "EventMachine и evented архитектура"Макс Лапшин - "EventMachine и evented архитектура"
Макс Лапшин - "EventMachine и evented архитектура"
 
Дмитрий Грошев, Фёдор Гоголев. Erlang и Haskell в production: проблемы и решения
Дмитрий Грошев, Фёдор Гоголев. Erlang и Haskell в production: проблемы и решенияДмитрий Грошев, Фёдор Гоголев. Erlang и Haskell в production: проблемы и решения
Дмитрий Грошев, Фёдор Гоголев. Erlang и Haskell в production: проблемы и решения
 
Async Python
Async PythonAsync Python
Async Python
 
Erlang мгновенное просветление
Erlang  мгновенное просветлениеErlang  мгновенное просветление
Erlang мгновенное просветление
 
Максим Лапшин — введение в Erlang
Максим Лапшин — введение в ErlangМаксим Лапшин — введение в Erlang
Максим Лапшин — введение в Erlang
 
Excelsior JET в действии
Excelsior JET в действииExcelsior JET в действии
Excelsior JET в действии
 
Tarantool/Silverbox (Юрий Востриков)
Tarantool/Silverbox (Юрий Востриков)Tarantool/Silverbox (Юрий Востриков)
Tarantool/Silverbox (Юрий Востриков)
 
Erlang&rails
Erlang&railsErlang&rails
Erlang&rails
 
Erlang ruby
Erlang rubyErlang ruby
Erlang ruby
 
“Чем хорош Erlang вообще и для веб-разработки в частности?”

“Чем хорош Erlang вообще и для веб-разработки в частности?”
“Чем хорош Erlang вообще и для веб-разработки в частности?”

“Чем хорош Erlang вообще и для веб-разработки в частности?”

 
Viacheslav Eremin about DOT NET (rus lang)
Viacheslav Eremin about DOT NET (rus lang)Viacheslav Eremin about DOT NET (rus lang)
Viacheslav Eremin about DOT NET (rus lang)
 
Invisible
InvisibleInvisible
Invisible
 
что и почему вы должны программировать на Erlang.максим лапшин. зал 4
что и почему вы должны программировать на Erlang.максим лапшин. зал 4что и почему вы должны программировать на Erlang.максим лапшин. зал 4
что и почему вы должны программировать на Erlang.максим лапшин. зал 4
 
Другая виртуализация
Другая виртуализацияДругая виртуализация
Другая виртуализация
 

More from Ilya Zelenchuk (6)

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

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 можно использовать где угодно, но неприятные ограничения в некоторых случаях заставляют от неё отказываться.