SlideShare a Scribd company logo
1 of 22
Coro. Intro.
Evgeniy Vansevich
https://github.com/kadavr
evgeniy@just4i.ru
What is Coro?
Cooperative Threads.
 Coroutine, сопрограмма, «корутина» -
компонент программы, который
поддерживает множество входных точек ,
остановку и продолжение выполнения с
сохранением определённого состояния.
 В Coro — «корутины» представлены
модулями Coro::State, и высокоуровневым
Coro.
Cooperative Threads.
Cooperative Threads.
use Coro;
async {
print "async 1n";
cede;
print "async 2n";
};
print "main 1n";
cede;
print "main 2n";
cede;
Async - Создание корутины
Тело корутины
Main корутина
Cooperative Threads.
Cede, yield — передача управления
Main корутина
use Coro;
async {
print "async 1n";
cede;
print "async 2n";
};
print "main 1n";
cede;
print "main 2n";
cede;
Cooperative Threads.
 cede — перемещает «корутину» в конец
очереди и вызывает schedulle.
 schedulle — вызывает шедулер, он
выбирает следующую "корутину" из очереди
и передает выполнение ей. Если очередь
пуста, - то передается выполнение
$Coro::idle.
Deadlock.
 Deadlock - ситуация в многозадачной среде,
при которой несколько процессов находятся
в состоянии бесконечного ожидания
ресурсов, захваченных самими этими
процессами.
 В Coro — это состояние, когда нет «корутин»
готовых к выполнению. Ситуация
обрабатывается в $Coro::idle.
Deadlock.
use Coro;
my $wakeme = $Coro::current;
async {
$wakeme->ready if 0.5 > rand;
};
schedule;
Deadlock.
FATAL: deadlock detected.
PID SC RSS USES Description Where
31976480 -C 19k 0 [main::] [program:9]
32223768 UC 12k 1 [Coro.pm:691]
32225088 -- 2068 1 [coro manager] [Coro.pm:691]
32225184 N- 216 0 [unblock_sub scheduler] -
Channel.
 Channel, канал — модель межпроцессного
взаимодействия и синхронизации через
передачу сообщений.
 В Coro — представлен модулем
Coro::Channel, реализован с помощью
Coro::Semaphore
Channel.
Channel.
use Coro;
my $chan = new Coro::Channel 2;
# $chan
async {
while(my $val = $chan->get){
warn "chan out:" . $val;
}
};
$chan->put($_) for(1..3);
Канал на 2 элемента
Ждем данные
Кладем данные в канал
The Real World!
Event Loop.
use Coro;
use Coro::AnyEvent;
async {
Coro::AnyEvent::sleep 4;
warn "sleep 4";
};
Coro::AnyEvent::sleep 5;
warn "sleep 5";
Event Loop.
Event Loop.
 AnyEvent - the DBI of event loop.
 Coro::Socket — non-blocking socket-I/O.
 Coro::AIO — truly asynchronous file and
directory I/O.
 Coro::Signal - thread signals.
 Coro::Semaphore - counting semaphores.
 Coro::LWP — non-blocking LWP.
AnyEvent::HTTP
 http_get "http://mail.ru", rouse_cb;
 my ($data, $hdr) = rouse_wait;
 return undef if $hdr->{Status} =~ m/^2/;
 #Работаем с телом ответа
Отдаёт управление
Возвращает управление
AnyEvent
 my $int_w = AnyEvent->signal (
 signal => "INT",
 cb => Coro::rouse_cb );
 Coro::rouse_wait;
 #Обрабатываем сигнал.
Coro::Generator
 Generator, генератор — одним из способов
реализации итераторов является
использование сопроцедур, которые могут
возвращать управление (и вычисленные
результаты) несколько раз, запоминая своё
состояние и точку возврата в предыдущем
вызове.
Coro::Generator
use Coro::Generator; # import 'generator' and 'yield'
my $even = generator {
my $x = 0;
while(1) {
$x += 2;
yield $x;
}
};
# This will print even numbers from 2..20
for(1..10) {
print $even->() . "n";
}
тело генератора
yield — сохранение состояния
 Coroutine - wikipedia: Сопрограмма
 Deadlock - wikipedia: Взаимная блокировка
 Generator - wikipedia: Итератор
 Coro - metacpan: Coro
 Coro asynchronous - slideshare

The end.

More Related Content

What's hot

Retro vs Volley
Retro vs VolleyRetro vs Volley
Retro vs VolleyArtjoker
 
Reform: путь к лучшему ORM
Reform: путь к лучшему ORMReform: путь к лучшему ORM
Reform: путь к лучшему ORMBadoo Development
 
Программирование Linux
Программирование LinuxПрограммирование Linux
Программирование LinuxAnthony Shoumikhin
 
Зачем программистам Ansible
Зачем программистам AnsibleЗачем программистам Ansible
Зачем программистам AnsibleDenis Honig
 
Особенности совместной работы Ruby и Oracle
Особенности совместной работы Ruby и OracleОсобенности совместной работы Ruby и Oracle
Особенности совместной работы Ruby и OracleNikita Shilnikov
 
«Опыт использования каналов в корутинах в боевом проекте» Григорий Федоров
 «Опыт использования каналов в корутинах в боевом проекте»  Григорий Федоров «Опыт использования каналов в корутинах в боевом проекте»  Григорий Федоров
«Опыт использования каналов в корутинах в боевом проекте» Григорий ФедоровMail.ru Group
 
ProcessingとMaxMSPの連携
ProcessingとMaxMSPの連携ProcessingとMaxMSPの連携
ProcessingとMaxMSPの連携Aki Sato
 
Стажировка 2016-07-14 02 Евгений Тарасенко. JavaScript
Стажировка 2016-07-14 02 Евгений Тарасенко. JavaScriptСтажировка 2016-07-14 02 Евгений Тарасенко. JavaScript
Стажировка 2016-07-14 02 Евгений Тарасенко. JavaScriptSmartTools
 
"Опыт внедрения автоматизации на PHP проектах (Docker, Gitlab CI)"
"Опыт внедрения автоматизации на PHP проектах (Docker, Gitlab CI)""Опыт внедрения автоматизации на PHP проектах (Docker, Gitlab CI)"
"Опыт внедрения автоматизации на PHP проектах (Docker, Gitlab CI)"Artjoker
 
"Почему язык Lua — это интересно?", Ник Заварицкий, (Mail.ru Group)
"Почему язык Lua — это интересно?", Ник Заварицкий, (Mail.ru Group)"Почему язык Lua — это интересно?", Ник Заварицкий, (Mail.ru Group)
"Почему язык Lua — это интересно?", Ник Заварицкий, (Mail.ru Group)Badoo Development
 
Что нового в PHP-5.3
Что нового в PHP-5.3 Что нового в PHP-5.3
Что нового в PHP-5.3 phpclub
 

What's hot (14)

Retro vs Volley
Retro vs VolleyRetro vs Volley
Retro vs Volley
 
Reform: путь к лучшему ORM
Reform: путь к лучшему ORMReform: путь к лучшему ORM
Reform: путь к лучшему ORM
 
Программирование Linux
Программирование LinuxПрограммирование Linux
Программирование Linux
 
Зачем программистам Ansible
Зачем программистам AnsibleЗачем программистам Ansible
Зачем программистам Ansible
 
Особенности совместной работы Ruby и Oracle
Особенности совместной работы Ruby и OracleОсобенности совместной работы Ruby и Oracle
Особенности совместной работы Ruby и Oracle
 
«Опыт использования каналов в корутинах в боевом проекте» Григорий Федоров
 «Опыт использования каналов в корутинах в боевом проекте»  Григорий Федоров «Опыт использования каналов в корутинах в боевом проекте»  Григорий Федоров
«Опыт использования каналов в корутинах в боевом проекте» Григорий Федоров
 
ProcessingとMaxMSPの連携
ProcessingとMaxMSPの連携ProcessingとMaxMSPの連携
ProcessingとMaxMSPの連携
 
Стажировка 2016-07-14 02 Евгений Тарасенко. JavaScript
Стажировка 2016-07-14 02 Евгений Тарасенко. JavaScriptСтажировка 2016-07-14 02 Евгений Тарасенко. JavaScript
Стажировка 2016-07-14 02 Евгений Тарасенко. JavaScript
 
Coroutines
CoroutinesCoroutines
Coroutines
 
Python infrastructure from scratch
Python infrastructure from scratchPython infrastructure from scratch
Python infrastructure from scratch
 
"Опыт внедрения автоматизации на PHP проектах (Docker, Gitlab CI)"
"Опыт внедрения автоматизации на PHP проектах (Docker, Gitlab CI)""Опыт внедрения автоматизации на PHP проектах (Docker, Gitlab CI)"
"Опыт внедрения автоматизации на PHP проектах (Docker, Gitlab CI)"
 
"Почему язык Lua — это интересно?", Ник Заварицкий, (Mail.ru Group)
"Почему язык Lua — это интересно?", Ник Заварицкий, (Mail.ru Group)"Почему язык Lua — это интересно?", Ник Заварицкий, (Mail.ru Group)
"Почему язык Lua — это интересно?", Ник Заварицкий, (Mail.ru Group)
 
Что нового в PHP-5.3
Что нового в PHP-5.3 Что нового в PHP-5.3
Что нового в PHP-5.3
 
Perl 5.10 и 5.12
Perl 5.10 и 5.12Perl 5.10 и 5.12
Perl 5.10 и 5.12
 

Viewers also liked

«Автотесты» Вадим Пуштаев, программист отдела внутренней разработки Поиска Ma...
«Автотесты» Вадим Пуштаев, программист отдела внутренней разработки Поиска Ma...«Автотесты» Вадим Пуштаев, программист отдела внутренней разработки Поиска Ma...
«Автотесты» Вадим Пуштаев, программист отдела внутренней разработки Поиска Ma...Mail.ru Group
 
Преобразование Perl-структур в XML. Трефилова Екатерина. Moscow.pm 6 июля 2013
Преобразование Perl-структур в XML. Трефилова Екатерина. Moscow.pm 6 июля 2013Преобразование Perl-структур в XML. Трефилова Екатерина. Moscow.pm 6 июля 2013
Преобразование Perl-структур в XML. Трефилова Екатерина. Moscow.pm 6 июля 2013Moscow.pm
 
Мотивированный игрок: вовлечение через средние и дальние цели, Александр Пань...
Мотивированный игрок: вовлечение через средние и дальние цели, Александр Пань...Мотивированный игрок: вовлечение через средние и дальние цели, Александр Пань...
Мотивированный игрок: вовлечение через средние и дальние цели, Александр Пань...Mail.ru Group
 
Современные базовые принципы UX-проектирования в играх, Ольга Шуберт, ведущий...
Современные базовые принципы UX-проектирования в играх, Ольга Шуберт, ведущий...Современные базовые принципы UX-проектирования в играх, Ольга Шуберт, ведущий...
Современные базовые принципы UX-проектирования в играх, Ольга Шуберт, ведущий...Mail.ru Group
 
Ивенты в играх — кейс Pixonic, Максим Кожнов, Руководитель отдела аналитики, ...
Ивенты в играх — кейс Pixonic, Максим Кожнов, Руководитель отдела аналитики, ...Ивенты в играх — кейс Pixonic, Максим Кожнов, Руководитель отдела аналитики, ...
Ивенты в играх — кейс Pixonic, Максим Кожнов, Руководитель отдела аналитики, ...Mail.ru Group
 
Особенности дизайна VR-игр, Дмитрий Трубицин, старший дизайнер игр, департаме...
Особенности дизайна VR-игр, Дмитрий Трубицин, старший дизайнер игр, департаме...Особенности дизайна VR-игр, Дмитрий Трубицин, старший дизайнер игр, департаме...
Особенности дизайна VR-игр, Дмитрий Трубицин, старший дизайнер игр, департаме...Mail.ru Group
 
пр Куда идет ИБ в России? (региональные аспекты)
пр Куда идет ИБ в России? (региональные аспекты)пр Куда идет ИБ в России? (региональные аспекты)
пр Куда идет ИБ в России? (региональные аспекты)Andrey Prozorov, CISM, CIPP/E, CDPSE. LA 27001
 
Play Perl — распределенная социальная игра для Perl-разработчиков. Вячеслав М...
Play Perl — распределенная социальная игра для Perl-разработчиков. Вячеслав М...Play Perl — распределенная социальная игра для Perl-разработчиков. Вячеслав М...
Play Perl — распределенная социальная игра для Perl-разработчиков. Вячеслав М...Moscow.pm
 
Не верь никому или разработка эффективных приложений (Как писать по настоящем...
Не верь никому или разработка эффективных приложений (Как писать по настоящем...Не верь никому или разработка эффективных приложений (Как писать по настоящем...
Не верь никому или разработка эффективных приложений (Как писать по настоящем...Moscow.pm
 
Динамический код: модифицируем таблицу символов во время выполнения. Елена Ши...
Динамический код: модифицируем таблицу символов во время выполнения. Елена Ши...Динамический код: модифицируем таблицу символов во время выполнения. Елена Ши...
Динамический код: модифицируем таблицу символов во время выполнения. Елена Ши...Moscow.pm
 
Александр Садовский "Как получить больше трафика"
Александр Садовский "Как получить больше трафика"Александр Садовский "Как получить больше трафика"
Александр Садовский "Как получить больше трафика"Yandex
 
7 типичных ошибок при запуске рекламной кампании во ВКонтакте
7 типичных ошибок при запуске рекламной кампании во ВКонтакте7 типичных ошибок при запуске рекламной кампании во ВКонтакте
7 типичных ошибок при запуске рекламной кампании во ВКонтактеАнна Караулова
 
Презентация директора филиала Мурзалиновой А.Ж.
Презентация директора филиала Мурзалиновой А.Ж.Презентация директора филиала Мурзалиновой А.Ж.
Презентация директора филиала Мурзалиновой А.Ж.frostblood87
 
Продвижение мобильных приложений - Тинькофф
Продвижение мобильных приложений - ТинькоффПродвижение мобильных приложений - Тинькофф
Продвижение мобильных приложений - ТинькоффTatiana Smetanina
 
Детали решают все: организация SMS-рассылок от А до Я
Детали решают все: организация SMS-рассылок от А до ЯДетали решают все: организация SMS-рассылок от А до Я
Детали решают все: организация SMS-рассылок от А до ЯDevino Telecom
 
Эффективный маркетинг с помощью Customer Adviser
Эффективный маркетинг с помощью Customer AdviserЭффективный маркетинг с помощью Customer Adviser
Эффективный маркетинг с помощью Customer AdviserPeter-Service
 
Как найти эффективного сотрудника и воспитать лояльность
Как найти эффективного сотрудника и воспитать лояльностьКак найти эффективного сотрудника и воспитать лояльность
Как найти эффективного сотрудника и воспитать лояльностьPeter-Service
 

Viewers also liked (20)

«Автотесты» Вадим Пуштаев, программист отдела внутренней разработки Поиска Ma...
«Автотесты» Вадим Пуштаев, программист отдела внутренней разработки Поиска Ma...«Автотесты» Вадим Пуштаев, программист отдела внутренней разработки Поиска Ma...
«Автотесты» Вадим Пуштаев, программист отдела внутренней разработки Поиска Ma...
 
Преобразование Perl-структур в XML. Трефилова Екатерина. Moscow.pm 6 июля 2013
Преобразование Perl-структур в XML. Трефилова Екатерина. Moscow.pm 6 июля 2013Преобразование Perl-структур в XML. Трефилова Екатерина. Moscow.pm 6 июля 2013
Преобразование Perl-структур в XML. Трефилова Екатерина. Moscow.pm 6 июля 2013
 
Мотивированный игрок: вовлечение через средние и дальние цели, Александр Пань...
Мотивированный игрок: вовлечение через средние и дальние цели, Александр Пань...Мотивированный игрок: вовлечение через средние и дальние цели, Александр Пань...
Мотивированный игрок: вовлечение через средние и дальние цели, Александр Пань...
 
Современные базовые принципы UX-проектирования в играх, Ольга Шуберт, ведущий...
Современные базовые принципы UX-проектирования в играх, Ольга Шуберт, ведущий...Современные базовые принципы UX-проектирования в играх, Ольга Шуберт, ведущий...
Современные базовые принципы UX-проектирования в играх, Ольга Шуберт, ведущий...
 
Ивенты в играх — кейс Pixonic, Максим Кожнов, Руководитель отдела аналитики, ...
Ивенты в играх — кейс Pixonic, Максим Кожнов, Руководитель отдела аналитики, ...Ивенты в играх — кейс Pixonic, Максим Кожнов, Руководитель отдела аналитики, ...
Ивенты в играх — кейс Pixonic, Максим Кожнов, Руководитель отдела аналитики, ...
 
Особенности дизайна VR-игр, Дмитрий Трубицин, старший дизайнер игр, департаме...
Особенности дизайна VR-игр, Дмитрий Трубицин, старший дизайнер игр, департаме...Особенности дизайна VR-игр, Дмитрий Трубицин, старший дизайнер игр, департаме...
Особенности дизайна VR-игр, Дмитрий Трубицин, старший дизайнер игр, департаме...
 
пр про SOC для ФСТЭК
пр про SOC для ФСТЭКпр про SOC для ФСТЭК
пр про SOC для ФСТЭК
 
пр Спроси эксперта про прогнозы ИБ
пр Спроси эксперта про прогнозы ИБпр Спроси эксперта про прогнозы ИБ
пр Спроси эксперта про прогнозы ИБ
 
пр Куда идет ИБ в России? (региональные аспекты)
пр Куда идет ИБ в России? (региональные аспекты)пр Куда идет ИБ в России? (региональные аспекты)
пр Куда идет ИБ в России? (региональные аспекты)
 
Elementos do coro
Elementos do coroElementos do coro
Elementos do coro
 
Play Perl — распределенная социальная игра для Perl-разработчиков. Вячеслав М...
Play Perl — распределенная социальная игра для Perl-разработчиков. Вячеслав М...Play Perl — распределенная социальная игра для Perl-разработчиков. Вячеслав М...
Play Perl — распределенная социальная игра для Perl-разработчиков. Вячеслав М...
 
Не верь никому или разработка эффективных приложений (Как писать по настоящем...
Не верь никому или разработка эффективных приложений (Как писать по настоящем...Не верь никому или разработка эффективных приложений (Как писать по настоящем...
Не верь никому или разработка эффективных приложений (Как писать по настоящем...
 
Динамический код: модифицируем таблицу символов во время выполнения. Елена Ши...
Динамический код: модифицируем таблицу символов во время выполнения. Елена Ши...Динамический код: модифицируем таблицу символов во время выполнения. Елена Ши...
Динамический код: модифицируем таблицу символов во время выполнения. Елена Ши...
 
Александр Садовский "Как получить больше трафика"
Александр Садовский "Как получить больше трафика"Александр Садовский "Как получить больше трафика"
Александр Садовский "Как получить больше трафика"
 
7 типичных ошибок при запуске рекламной кампании во ВКонтакте
7 типичных ошибок при запуске рекламной кампании во ВКонтакте7 типичных ошибок при запуске рекламной кампании во ВКонтакте
7 типичных ошибок при запуске рекламной кампании во ВКонтакте
 
Презентация директора филиала Мурзалиновой А.Ж.
Презентация директора филиала Мурзалиновой А.Ж.Презентация директора филиала Мурзалиновой А.Ж.
Презентация директора филиала Мурзалиновой А.Ж.
 
Продвижение мобильных приложений - Тинькофф
Продвижение мобильных приложений - ТинькоффПродвижение мобильных приложений - Тинькофф
Продвижение мобильных приложений - Тинькофф
 
Детали решают все: организация SMS-рассылок от А до Я
Детали решают все: организация SMS-рассылок от А до ЯДетали решают все: организация SMS-рассылок от А до Я
Детали решают все: организация SMS-рассылок от А до Я
 
Эффективный маркетинг с помощью Customer Adviser
Эффективный маркетинг с помощью Customer AdviserЭффективный маркетинг с помощью Customer Adviser
Эффективный маркетинг с помощью Customer Adviser
 
Как найти эффективного сотрудника и воспитать лояльность
Как найти эффективного сотрудника и воспитать лояльностьКак найти эффективного сотрудника и воспитать лояльность
Как найти эффективного сотрудника и воспитать лояльность
 

Similar to «Coro. Intro» Евгений Вансевич, программист Почты Mail.Ru

Дмитрий Жестилевский — Yet another threading framework: асинхронная разработк...
Дмитрий Жестилевский — Yet another threading framework: асинхронная разработк...Дмитрий Жестилевский — Yet another threading framework: асинхронная разработк...
Дмитрий Жестилевский — Yet another threading framework: асинхронная разработк...Yandex
 
Управление большим количеством физических серверов, Александр Берсенев, Инст...
 Управление большим количеством физических серверов, Александр Берсенев, Инст... Управление большим количеством физических серверов, Александр Берсенев, Инст...
Управление большим количеством физических серверов, Александр Берсенев, Инст...it-people
 
Другая виртуализация
Другая виртуализацияДругая виртуализация
Другая виртуализацияYandex
 
PHP basic
PHP basicPHP basic
PHP basicNoveo
 
Григорий Демченко, Асинхронность и неблокирующая синхронизация
Григорий Демченко, Асинхронность и неблокирующая синхронизацияГригорий Демченко, Асинхронность и неблокирующая синхронизация
Григорий Демченко, Асинхронность и неблокирующая синхронизацияSergey Platonov
 
Asynchrony and coroutines
Asynchrony and coroutinesAsynchrony and coroutines
Asynchrony and coroutinescorehard_by
 
Асинхронность и сопрограммы
Асинхронность и сопрограммыАсинхронность и сопрограммы
Асинхронность и сопрограммыPlatonov Sergey
 
Coro - реальные потоки в Perl
Coro - реальные потоки в PerlCoro - реальные потоки в Perl
Coro - реальные потоки в PerlIlya Zelenchuk
 
Инфраструктура распределенных приложений на nodejs / Станислав Гуменюк (Rambl...
Инфраструктура распределенных приложений на nodejs / Станислав Гуменюк (Rambl...Инфраструктура распределенных приложений на nodejs / Станислав Гуменюк (Rambl...
Инфраструктура распределенных приложений на nodejs / Станислав Гуменюк (Rambl...Ontico
 
Леонид Васильев "Python в инфраструктуре поиска"
Леонид Васильев "Python в инфраструктуре поиска"Леонид Васильев "Python в инфраструктуре поиска"
Леонид Васильев "Python в инфраструктуре поиска"Yandex
 
Олесь Писаренко "Открываем Яндекс.Танк"
Олесь Писаренко "Открываем Яндекс.Танк"Олесь Писаренко "Открываем Яндекс.Танк"
Олесь Писаренко "Открываем Яндекс.Танк"Yandex
 
5 способов деплоя PHP-кода в условиях хайлоада / Юрий Насретдинов (Badoo)
5 способов деплоя PHP-кода в условиях хайлоада / Юрий Насретдинов (Badoo)5 способов деплоя PHP-кода в условиях хайлоада / Юрий Насретдинов (Badoo)
5 способов деплоя PHP-кода в условиях хайлоада / Юрий Насретдинов (Badoo)Ontico
 
5 способов деплоя PHP-кода в условиях хайлоада
5 способов деплоя PHP-кода в условиях хайлоада5 способов деплоя PHP-кода в условиях хайлоада
5 способов деплоя PHP-кода в условиях хайлоадаBadoo Development
 
Checkpoint and Restore In Userspace: Готово или нет?
Checkpoint and Restore In Userspace: Готово или нет?Checkpoint and Restore In Userspace: Готово или нет?
Checkpoint and Restore In Userspace: Готово или нет?OpenVZ
 
JPoint 2016 - Bytecode
JPoint 2016 - BytecodeJPoint 2016 - Bytecode
JPoint 2016 - BytecodeAnton Arhipov
 
Async clinic by by Sergey Teplyakov
Async clinic by by Sergey TeplyakovAsync clinic by by Sergey Teplyakov
Async clinic by by Sergey TeplyakovAlex Tumanoff
 

Similar to «Coro. Intro» Евгений Вансевич, программист Почты Mail.Ru (17)

Дмитрий Жестилевский — Yet another threading framework: асинхронная разработк...
Дмитрий Жестилевский — Yet another threading framework: асинхронная разработк...Дмитрий Жестилевский — Yet another threading framework: асинхронная разработк...
Дмитрий Жестилевский — Yet another threading framework: асинхронная разработк...
 
Управление большим количеством физических серверов, Александр Берсенев, Инст...
 Управление большим количеством физических серверов, Александр Берсенев, Инст... Управление большим количеством физических серверов, Александр Берсенев, Инст...
Управление большим количеством физических серверов, Александр Берсенев, Инст...
 
Другая виртуализация
Другая виртуализацияДругая виртуализация
Другая виртуализация
 
PHP basic
PHP basicPHP basic
PHP basic
 
Григорий Демченко, Асинхронность и неблокирующая синхронизация
Григорий Демченко, Асинхронность и неблокирующая синхронизацияГригорий Демченко, Асинхронность и неблокирующая синхронизация
Григорий Демченко, Асинхронность и неблокирующая синхронизация
 
Chef
ChefChef
Chef
 
Asynchrony and coroutines
Asynchrony and coroutinesAsynchrony and coroutines
Asynchrony and coroutines
 
Асинхронность и сопрограммы
Асинхронность и сопрограммыАсинхронность и сопрограммы
Асинхронность и сопрограммы
 
Coro - реальные потоки в Perl
Coro - реальные потоки в PerlCoro - реальные потоки в Perl
Coro - реальные потоки в Perl
 
Инфраструктура распределенных приложений на nodejs / Станислав Гуменюк (Rambl...
Инфраструктура распределенных приложений на nodejs / Станислав Гуменюк (Rambl...Инфраструктура распределенных приложений на nodejs / Станислав Гуменюк (Rambl...
Инфраструктура распределенных приложений на nodejs / Станислав Гуменюк (Rambl...
 
Леонид Васильев "Python в инфраструктуре поиска"
Леонид Васильев "Python в инфраструктуре поиска"Леонид Васильев "Python в инфраструктуре поиска"
Леонид Васильев "Python в инфраструктуре поиска"
 
Олесь Писаренко "Открываем Яндекс.Танк"
Олесь Писаренко "Открываем Яндекс.Танк"Олесь Писаренко "Открываем Яндекс.Танк"
Олесь Писаренко "Открываем Яндекс.Танк"
 
5 способов деплоя PHP-кода в условиях хайлоада / Юрий Насретдинов (Badoo)
5 способов деплоя PHP-кода в условиях хайлоада / Юрий Насретдинов (Badoo)5 способов деплоя PHP-кода в условиях хайлоада / Юрий Насретдинов (Badoo)
5 способов деплоя PHP-кода в условиях хайлоада / Юрий Насретдинов (Badoo)
 
5 способов деплоя PHP-кода в условиях хайлоада
5 способов деплоя PHP-кода в условиях хайлоада5 способов деплоя PHP-кода в условиях хайлоада
5 способов деплоя PHP-кода в условиях хайлоада
 
Checkpoint and Restore In Userspace: Готово или нет?
Checkpoint and Restore In Userspace: Готово или нет?Checkpoint and Restore In Userspace: Готово или нет?
Checkpoint and Restore In Userspace: Готово или нет?
 
JPoint 2016 - Bytecode
JPoint 2016 - BytecodeJPoint 2016 - Bytecode
JPoint 2016 - Bytecode
 
Async clinic by by Sergey Teplyakov
Async clinic by by Sergey TeplyakovAsync clinic by by Sergey Teplyakov
Async clinic by by Sergey Teplyakov
 

More from Mail.ru Group

Автоматизация без тест-инженеров по автоматизации, Мария Терехина и Владислав...
Автоматизация без тест-инженеров по автоматизации, Мария Терехина и Владислав...Автоматизация без тест-инженеров по автоматизации, Мария Терехина и Владислав...
Автоматизация без тест-инженеров по автоматизации, Мария Терехина и Владислав...Mail.ru Group
 
BDD для фронтенда. Автоматизация тестирования с Cucumber, Cypress и Jenkins, ...
BDD для фронтенда. Автоматизация тестирования с Cucumber, Cypress и Jenkins, ...BDD для фронтенда. Автоматизация тестирования с Cucumber, Cypress и Jenkins, ...
BDD для фронтенда. Автоматизация тестирования с Cucumber, Cypress и Jenkins, ...Mail.ru Group
 
Другая сторона баг-баунти-программ: как это выглядит изнутри, Владимир Дубровин
Другая сторона баг-баунти-программ: как это выглядит изнутри, Владимир ДубровинДругая сторона баг-баунти-программ: как это выглядит изнутри, Владимир Дубровин
Другая сторона баг-баунти-программ: как это выглядит изнутри, Владимир ДубровинMail.ru Group
 
Использование Fiddler и Charles при тестировании фронтенда проекта pulse.mail...
Использование Fiddler и Charles при тестировании фронтенда проекта pulse.mail...Использование Fiddler и Charles при тестировании фронтенда проекта pulse.mail...
Использование Fiddler и Charles при тестировании фронтенда проекта pulse.mail...Mail.ru Group
 
Управление инцидентами в Почте Mail.ru, Антон Викторов
Управление инцидентами в Почте Mail.ru, Антон ВикторовУправление инцидентами в Почте Mail.ru, Антон Викторов
Управление инцидентами в Почте Mail.ru, Антон ВикторовMail.ru Group
 
DAST в CI/CD, Ольга Свиридова
DAST в CI/CD, Ольга СвиридоваDAST в CI/CD, Ольга Свиридова
DAST в CI/CD, Ольга СвиридоваMail.ru Group
 
Почему вам стоит использовать свой велосипед и почему не стоит Александр Бел...
Почему вам стоит использовать свой велосипед и почему не стоит  Александр Бел...Почему вам стоит использовать свой велосипед и почему не стоит  Александр Бел...
Почему вам стоит использовать свой велосипед и почему не стоит Александр Бел...Mail.ru Group
 
CV в пайплайне распознавания ценников товаров: трюки и хитрости Николай Масл...
CV в пайплайне распознавания ценников товаров: трюки и хитрости  Николай Масл...CV в пайплайне распознавания ценников товаров: трюки и хитрости  Николай Масл...
CV в пайплайне распознавания ценников товаров: трюки и хитрости Николай Масл...Mail.ru Group
 
RAPIDS: ускоряем Pandas и scikit-learn на GPU Павел Клеменков, NVidia
RAPIDS: ускоряем Pandas и scikit-learn на GPU  Павел Клеменков, NVidiaRAPIDS: ускоряем Pandas и scikit-learn на GPU  Павел Клеменков, NVidia
RAPIDS: ускоряем Pandas и scikit-learn на GPU Павел Клеменков, NVidiaMail.ru Group
 
WebAuthn в реальной жизни, Анатолий Остапенко
WebAuthn в реальной жизни, Анатолий ОстапенкоWebAuthn в реальной жизни, Анатолий Остапенко
WebAuthn в реальной жизни, Анатолий ОстапенкоMail.ru Group
 
AMP для электронной почты, Сергей Пешков
AMP для электронной почты, Сергей ПешковAMP для электронной почты, Сергей Пешков
AMP для электронной почты, Сергей ПешковMail.ru Group
 
Как мы захотели TWA и сделали его без мобильных разработчиков, Данила Стрелков
Как мы захотели TWA и сделали его без мобильных разработчиков, Данила СтрелковКак мы захотели TWA и сделали его без мобильных разработчиков, Данила Стрелков
Как мы захотели TWA и сделали его без мобильных разработчиков, Данила СтрелковMail.ru Group
 
Кейсы использования PWA для партнерских предложений в Delivery Club, Никита Б...
Кейсы использования PWA для партнерских предложений в Delivery Club, Никита Б...Кейсы использования PWA для партнерских предложений в Delivery Club, Никита Б...
Кейсы использования PWA для партнерских предложений в Delivery Club, Никита Б...Mail.ru Group
 
Метапрограммирование: строим конечный автомат, Сергей Федоров, Яндекс.Такси
Метапрограммирование: строим конечный автомат, Сергей Федоров, Яндекс.ТаксиМетапрограммирование: строим конечный автомат, Сергей Федоров, Яндекс.Такси
Метапрограммирование: строим конечный автомат, Сергей Федоров, Яндекс.ТаксиMail.ru Group
 
Как не сделать врагами архитектуру и оптимизацию, Кирилл Березин, Mail.ru Group
Как не сделать врагами архитектуру и оптимизацию, Кирилл Березин, Mail.ru GroupКак не сделать врагами архитектуру и оптимизацию, Кирилл Березин, Mail.ru Group
Как не сделать врагами архитектуру и оптимизацию, Кирилл Березин, Mail.ru GroupMail.ru Group
 
Этика искусственного интеллекта, Александр Кармаев (AI Journey)
Этика искусственного интеллекта, Александр Кармаев (AI Journey)Этика искусственного интеллекта, Александр Кармаев (AI Journey)
Этика искусственного интеллекта, Александр Кармаев (AI Journey)Mail.ru Group
 
Нейро-машинный перевод в вопросно-ответных системах, Федор Федоренко (AI Jour...
Нейро-машинный перевод в вопросно-ответных системах, Федор Федоренко (AI Jour...Нейро-машинный перевод в вопросно-ответных системах, Федор Федоренко (AI Jour...
Нейро-машинный перевод в вопросно-ответных системах, Федор Федоренко (AI Jour...Mail.ru Group
 
Конвергенция технологий как тренд развития искусственного интеллекта, Владими...
Конвергенция технологий как тренд развития искусственного интеллекта, Владими...Конвергенция технологий как тренд развития искусственного интеллекта, Владими...
Конвергенция технологий как тренд развития искусственного интеллекта, Владими...Mail.ru Group
 
Обзор трендов рекомендательных систем от Пульса, Андрей Мурашев (AI Journey)
Обзор трендов рекомендательных систем от Пульса, Андрей Мурашев (AI Journey)Обзор трендов рекомендательных систем от Пульса, Андрей Мурашев (AI Journey)
Обзор трендов рекомендательных систем от Пульса, Андрей Мурашев (AI Journey)Mail.ru Group
 
Мир глазами нейросетей, Данила Байгушев, Александр Сноркин ()
Мир глазами нейросетей, Данила Байгушев, Александр Сноркин ()Мир глазами нейросетей, Данила Байгушев, Александр Сноркин ()
Мир глазами нейросетей, Данила Байгушев, Александр Сноркин ()Mail.ru Group
 

More from Mail.ru Group (20)

Автоматизация без тест-инженеров по автоматизации, Мария Терехина и Владислав...
Автоматизация без тест-инженеров по автоматизации, Мария Терехина и Владислав...Автоматизация без тест-инженеров по автоматизации, Мария Терехина и Владислав...
Автоматизация без тест-инженеров по автоматизации, Мария Терехина и Владислав...
 
BDD для фронтенда. Автоматизация тестирования с Cucumber, Cypress и Jenkins, ...
BDD для фронтенда. Автоматизация тестирования с Cucumber, Cypress и Jenkins, ...BDD для фронтенда. Автоматизация тестирования с Cucumber, Cypress и Jenkins, ...
BDD для фронтенда. Автоматизация тестирования с Cucumber, Cypress и Jenkins, ...
 
Другая сторона баг-баунти-программ: как это выглядит изнутри, Владимир Дубровин
Другая сторона баг-баунти-программ: как это выглядит изнутри, Владимир ДубровинДругая сторона баг-баунти-программ: как это выглядит изнутри, Владимир Дубровин
Другая сторона баг-баунти-программ: как это выглядит изнутри, Владимир Дубровин
 
Использование Fiddler и Charles при тестировании фронтенда проекта pulse.mail...
Использование Fiddler и Charles при тестировании фронтенда проекта pulse.mail...Использование Fiddler и Charles при тестировании фронтенда проекта pulse.mail...
Использование Fiddler и Charles при тестировании фронтенда проекта pulse.mail...
 
Управление инцидентами в Почте Mail.ru, Антон Викторов
Управление инцидентами в Почте Mail.ru, Антон ВикторовУправление инцидентами в Почте Mail.ru, Антон Викторов
Управление инцидентами в Почте Mail.ru, Антон Викторов
 
DAST в CI/CD, Ольга Свиридова
DAST в CI/CD, Ольга СвиридоваDAST в CI/CD, Ольга Свиридова
DAST в CI/CD, Ольга Свиридова
 
Почему вам стоит использовать свой велосипед и почему не стоит Александр Бел...
Почему вам стоит использовать свой велосипед и почему не стоит  Александр Бел...Почему вам стоит использовать свой велосипед и почему не стоит  Александр Бел...
Почему вам стоит использовать свой велосипед и почему не стоит Александр Бел...
 
CV в пайплайне распознавания ценников товаров: трюки и хитрости Николай Масл...
CV в пайплайне распознавания ценников товаров: трюки и хитрости  Николай Масл...CV в пайплайне распознавания ценников товаров: трюки и хитрости  Николай Масл...
CV в пайплайне распознавания ценников товаров: трюки и хитрости Николай Масл...
 
RAPIDS: ускоряем Pandas и scikit-learn на GPU Павел Клеменков, NVidia
RAPIDS: ускоряем Pandas и scikit-learn на GPU  Павел Клеменков, NVidiaRAPIDS: ускоряем Pandas и scikit-learn на GPU  Павел Клеменков, NVidia
RAPIDS: ускоряем Pandas и scikit-learn на GPU Павел Клеменков, NVidia
 
WebAuthn в реальной жизни, Анатолий Остапенко
WebAuthn в реальной жизни, Анатолий ОстапенкоWebAuthn в реальной жизни, Анатолий Остапенко
WebAuthn в реальной жизни, Анатолий Остапенко
 
AMP для электронной почты, Сергей Пешков
AMP для электронной почты, Сергей ПешковAMP для электронной почты, Сергей Пешков
AMP для электронной почты, Сергей Пешков
 
Как мы захотели TWA и сделали его без мобильных разработчиков, Данила Стрелков
Как мы захотели TWA и сделали его без мобильных разработчиков, Данила СтрелковКак мы захотели TWA и сделали его без мобильных разработчиков, Данила Стрелков
Как мы захотели TWA и сделали его без мобильных разработчиков, Данила Стрелков
 
Кейсы использования PWA для партнерских предложений в Delivery Club, Никита Б...
Кейсы использования PWA для партнерских предложений в Delivery Club, Никита Б...Кейсы использования PWA для партнерских предложений в Delivery Club, Никита Б...
Кейсы использования PWA для партнерских предложений в Delivery Club, Никита Б...
 
Метапрограммирование: строим конечный автомат, Сергей Федоров, Яндекс.Такси
Метапрограммирование: строим конечный автомат, Сергей Федоров, Яндекс.ТаксиМетапрограммирование: строим конечный автомат, Сергей Федоров, Яндекс.Такси
Метапрограммирование: строим конечный автомат, Сергей Федоров, Яндекс.Такси
 
Как не сделать врагами архитектуру и оптимизацию, Кирилл Березин, Mail.ru Group
Как не сделать врагами архитектуру и оптимизацию, Кирилл Березин, Mail.ru GroupКак не сделать врагами архитектуру и оптимизацию, Кирилл Березин, Mail.ru Group
Как не сделать врагами архитектуру и оптимизацию, Кирилл Березин, Mail.ru Group
 
Этика искусственного интеллекта, Александр Кармаев (AI Journey)
Этика искусственного интеллекта, Александр Кармаев (AI Journey)Этика искусственного интеллекта, Александр Кармаев (AI Journey)
Этика искусственного интеллекта, Александр Кармаев (AI Journey)
 
Нейро-машинный перевод в вопросно-ответных системах, Федор Федоренко (AI Jour...
Нейро-машинный перевод в вопросно-ответных системах, Федор Федоренко (AI Jour...Нейро-машинный перевод в вопросно-ответных системах, Федор Федоренко (AI Jour...
Нейро-машинный перевод в вопросно-ответных системах, Федор Федоренко (AI Jour...
 
Конвергенция технологий как тренд развития искусственного интеллекта, Владими...
Конвергенция технологий как тренд развития искусственного интеллекта, Владими...Конвергенция технологий как тренд развития искусственного интеллекта, Владими...
Конвергенция технологий как тренд развития искусственного интеллекта, Владими...
 
Обзор трендов рекомендательных систем от Пульса, Андрей Мурашев (AI Journey)
Обзор трендов рекомендательных систем от Пульса, Андрей Мурашев (AI Journey)Обзор трендов рекомендательных систем от Пульса, Андрей Мурашев (AI Journey)
Обзор трендов рекомендательных систем от Пульса, Андрей Мурашев (AI Journey)
 
Мир глазами нейросетей, Данила Байгушев, Александр Сноркин ()
Мир глазами нейросетей, Данила Байгушев, Александр Сноркин ()Мир глазами нейросетей, Данила Байгушев, Александр Сноркин ()
Мир глазами нейросетей, Данила Байгушев, Александр Сноркин ()
 

«Coro. Intro» Евгений Вансевич, программист Почты Mail.Ru

  • 3. Cooperative Threads.  Coroutine, сопрограмма, «корутина» - компонент программы, который поддерживает множество входных точек , остановку и продолжение выполнения с сохранением определённого состояния.  В Coro — «корутины» представлены модулями Coro::State, и высокоуровневым Coro.
  • 5. Cooperative Threads. use Coro; async { print "async 1n"; cede; print "async 2n"; }; print "main 1n"; cede; print "main 2n"; cede; Async - Создание корутины Тело корутины Main корутина
  • 6. Cooperative Threads. Cede, yield — передача управления Main корутина use Coro; async { print "async 1n"; cede; print "async 2n"; }; print "main 1n"; cede; print "main 2n"; cede;
  • 7. Cooperative Threads.  cede — перемещает «корутину» в конец очереди и вызывает schedulle.  schedulle — вызывает шедулер, он выбирает следующую "корутину" из очереди и передает выполнение ей. Если очередь пуста, - то передается выполнение $Coro::idle.
  • 8. Deadlock.  Deadlock - ситуация в многозадачной среде, при которой несколько процессов находятся в состоянии бесконечного ожидания ресурсов, захваченных самими этими процессами.  В Coro — это состояние, когда нет «корутин» готовых к выполнению. Ситуация обрабатывается в $Coro::idle.
  • 9. Deadlock. use Coro; my $wakeme = $Coro::current; async { $wakeme->ready if 0.5 > rand; }; schedule;
  • 10. Deadlock. FATAL: deadlock detected. PID SC RSS USES Description Where 31976480 -C 19k 0 [main::] [program:9] 32223768 UC 12k 1 [Coro.pm:691] 32225088 -- 2068 1 [coro manager] [Coro.pm:691] 32225184 N- 216 0 [unblock_sub scheduler] -
  • 11. Channel.  Channel, канал — модель межпроцессного взаимодействия и синхронизации через передачу сообщений.  В Coro — представлен модулем Coro::Channel, реализован с помощью Coro::Semaphore
  • 13. Channel. use Coro; my $chan = new Coro::Channel 2; # $chan async { while(my $val = $chan->get){ warn "chan out:" . $val; } }; $chan->put($_) for(1..3); Канал на 2 элемента Ждем данные Кладем данные в канал
  • 15. Event Loop. use Coro; use Coro::AnyEvent; async { Coro::AnyEvent::sleep 4; warn "sleep 4"; }; Coro::AnyEvent::sleep 5; warn "sleep 5";
  • 17. Event Loop.  AnyEvent - the DBI of event loop.  Coro::Socket — non-blocking socket-I/O.  Coro::AIO — truly asynchronous file and directory I/O.  Coro::Signal - thread signals.  Coro::Semaphore - counting semaphores.  Coro::LWP — non-blocking LWP.
  • 18. AnyEvent::HTTP  http_get "http://mail.ru", rouse_cb;  my ($data, $hdr) = rouse_wait;  return undef if $hdr->{Status} =~ m/^2/;  #Работаем с телом ответа Отдаёт управление Возвращает управление AnyEvent  my $int_w = AnyEvent->signal (  signal => "INT",  cb => Coro::rouse_cb );  Coro::rouse_wait;  #Обрабатываем сигнал.
  • 19. Coro::Generator  Generator, генератор — одним из способов реализации итераторов является использование сопроцедур, которые могут возвращать управление (и вычисленные результаты) несколько раз, запоминая своё состояние и точку возврата в предыдущем вызове.
  • 20. Coro::Generator use Coro::Generator; # import 'generator' and 'yield' my $even = generator { my $x = 0; while(1) { $x += 2; yield $x; } }; # This will print even numbers from 2..20 for(1..10) { print $even->() . "n"; } тело генератора yield — сохранение состояния
  • 21.  Coroutine - wikipedia: Сопрограмма  Deadlock - wikipedia: Взаимная блокировка  Generator - wikipedia: Итератор  Coro - metacpan: Coro  Coro asynchronous - slideshare 