SlideShare una empresa de Scribd logo
1 de 10
Descargar para leer sin conexión
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 можно использовать где угодно, но
 неприятные ограничения в некоторых
 случаях заставляют от неё отказываться.
Спасибо за внимание.
      Вопросы?

Más contenido relacionado

La actualidad más candente

JIT-компиляция в виртуальной машине Java (HighLoad++ 2013)
JIT-компиляция в виртуальной машине Java (HighLoad++ 2013)JIT-компиляция в виртуальной машине Java (HighLoad++ 2013)
JIT-компиляция в виртуальной машине Java (HighLoad++ 2013)aragozin
 
Cборка мусора в Java без пауз (HighLoad++ 2013)
Cборка мусора в Java без пауз  (HighLoad++ 2013)Cборка мусора в Java без пауз  (HighLoad++ 2013)
Cборка мусора в Java без пауз (HighLoad++ 2013)aragozin
 
Немного о кеше
Немного о кешеНемного о кеше
Немного о кешеDmitry Ignatiev
 
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 OleksiiSvitla Systems Inc.
 
Ферапонтов_Резюме
Ферапонтов_РезюмеФерапонтов_Резюме
Ферапонтов_РезюмеOleg Ferapontov
 
Multiprocessor Programming Intro (lecture 2)
Multiprocessor Programming Intro (lecture 2)Multiprocessor Programming Intro (lecture 2)
Multiprocessor Programming Intro (lecture 2)Dmitry Tsitelov
 

La actualidad más candente (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 a Coro - реальные потоки в Perl

Ivbit erlang презентация
Ivbit   erlang презентацияIvbit   erlang презентация
Ivbit erlang презентацияjskonst
 
Алексей Туля - А нужен ли вам erlang?
Алексей Туля - А нужен ли вам erlang?Алексей Туля - А нужен ли вам erlang?
Алексей Туля - А нужен ли вам erlang?Minsk Linux User Group
 
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?Alexander Syrotenko
 
Erlang killer features
Erlang killer featuresErlang killer features
Erlang killer featuresYuri Zhloba
 
F# - функциональный язык «новой» волны
F# - функциональный  язык «новой» волныF# - функциональный  язык «новой» волны
F# - функциональный язык «новой» волныKiev ALT.NET
 
Макс Лапшин - "EventMachine и evented архитектура"
Макс Лапшин - "EventMachine и evented архитектура"Макс Лапшин - "EventMachine и evented архитектура"
Макс Лапшин - "EventMachine и evented архитектура"railsclub
 
Дмитрий Грошев, Фёдор Гоголев. Erlang и Haskell в production: проблемы и решения
Дмитрий Грошев, Фёдор Гоголев. Erlang и Haskell в production: проблемы и решенияДмитрий Грошев, Фёдор Гоголев. Erlang и Haskell в production: проблемы и решения
Дмитрий Грошев, Фёдор Гоголев. Erlang и Haskell в production: проблемы и решенияFProg
 
Erlang мгновенное просветление
Erlang  мгновенное просветлениеErlang  мгновенное просветление
Erlang мгновенное просветлениеMaxim Sokhatsky
 
Максим Лапшин — введение в Erlang
Максим Лапшин — введение в ErlangМаксим Лапшин — введение в Erlang
Максим Лапшин — введение в ErlangАлександр Ежов
 
Excelsior JET в действии
Excelsior JET в действииExcelsior JET в действии
Excelsior JET в действииNikita Lipsky
 
Tarantool/Silverbox (Юрий Востриков)
Tarantool/Silverbox (Юрий Востриков)Tarantool/Silverbox (Юрий Востриков)
Tarantool/Silverbox (Юрий Востриков)Ontico
 
“Чем хорош Erlang вообще и для веб-разработки в частности?”

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

“Чем хорош Erlang вообще и для веб-разработки в частности?”
Olga Lavrentieva
 
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)Viacheslav Eremin
 
что и почему вы должны программировать на Erlang.максим лапшин. зал 4
что и почему вы должны программировать на Erlang.максим лапшин. зал 4что и почему вы должны программировать на Erlang.максим лапшин. зал 4
что и почему вы должны программировать на Erlang.максим лапшин. зал 4rit2011
 
Другая виртуализация
Другая виртуализацияДругая виртуализация
Другая виртуализацияYandex
 

Similar a 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
 
Другая виртуализация
Другая виртуализацияДругая виртуализация
Другая виртуализация
 

Más de Ilya Zelenchuk

Использование Mojolicious::Plugin::AnyData в тестовом режиме проекта
Использование Mojolicious::Plugin::AnyData в тестовом режиме проектаИспользование Mojolicious::Plugin::AnyData в тестовом режиме проекта
Использование Mojolicious::Plugin::AnyData в тестовом режиме проектаIlya Zelenchuk
 
Потоки в перле изнутри
Потоки в перле изнутриПотоки в перле изнутри
Потоки в перле изнутриIlya Zelenchuk
 
Функциональные тесты на Perl
Функциональные тесты на PerlФункциональные тесты на Perl
Функциональные тесты на PerlIlya Zelenchuk
 
Контрактное программирование
Контрактное программированиеКонтрактное программирование
Контрактное программированиеIlya Zelenchuk
 

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