Re[4]: эффективная реализация thread pool
От: Слава  
Дата: 26.05.18 08:33
Оценка:
Здравствуйте, reversecode, Вы писали:

R>ничего особенного, код почти 1:1 с boost::asio который вы даже открывать не хотите

R>у вас короны случайно нет ? очень похожи на царя

Уймитесь, а. Вам русский язык не нравится, писать-читать на нём? Исходники предпочитаете?
Re[15]: эффективная реализация thread pool
От: vopl Россия  
Дата: 26.05.18 09:57
Оценка:
Здравствуйте, barney, Вы писали:

...
B>про Context / Coroutines
B>вообще это интересно, вполне можно использовать

B>Технический практический вопрос:

B>Как именно сделать некий легковесный пул задач на корутинах?

B>Я так понимаю, корутины дают легковесное переключение "контекста" т.к оным там является переключение (сохранение/восстановление)

B>указателя инструкций + текущего стека + регистров.
B>И это эффективнее вызова планировщика ОС

B>Плюс, позволяет писать более "синхронный" код, как в лекции про яндекс.карты.


B>Интересно, как именно сделать "асинхронный фьючерс" и wait() — например, ожидание ввода-вывода, сети, результата работы другой корутины и т.д.


Эту ссылку уже приводили выше, там именно про асинхронный фьючерс, wait rethinkdb-concurrency

Если пропрет поразбираться просто из спортивного интереса — могу показать еще такое:
управлятор пулом задач на корутинах

от него вниз:
собственно, корутина
движок контекстов от буста рядом есть еще posix-ucontext

и вверх:
ожидатор
пример объекта синхронизации 'событие' там рядом еще много других всяких

future
promise
их ядро

кишки устройства задачи
запуск задачи

некоторые примеры использования:
запуск задачи
синхронизация
future/promise

B>... ожидание ввода-вывода

файловый дескриптор (он же сокет)
ожидание событий на дескрипторах, epoll
Re[15]: эффективная реализация thread pool
От: vopl Россия  
Дата: 29.05.18 08:00
Оценка:
Здравствуйте, barney, Вы писали:

...

B>про Context / Coroutines

B>вообще это интересно, вполне можно использовать

B>Технический практический вопрос:

B>Как именно сделать некий легковесный пул задач на корутинах?

B>Я так понимаю, корутины дают легковесное переключение "контекста" т.к оным там является переключение (сохранение/восстановление)

B>указателя инструкций + текущего стека + регистров.
B>И это эффективнее вызова планировщика ОС

B>Плюс, позволяет писать более "синхронный" код, как в лекции про яндекс.карты.


B>Интересно, как именно сделать "асинхронный фьючерс" и wait() — например, ожидание ввода-вывода, сети, результата работы другой корутины и т.д.


еще можно посмотреть mordor
Re[15]: эффективная реализация thread pool
От: alex_public  
Дата: 29.05.18 17:20
Оценка:
Здравствуйте, barney, Вы писали:

_>> Там сложности в основном у библиотек требующих всяческий специфичный системный API...

B>м... я думал, boost опирается только на c++ std / posix и с андроидом проблема именно в совместимости с NDK
B>(там, например нет стандартной C библиотеки, там bionic)

Ну во-первых там не только bionic, но есть и libc и libstdc++. Но дело как раз не в них. Наоборот, главной плюс Boost'а в том, что он абстрагирует многие платфомозависимые вещи, имея при этом внутри себя по специфической (оптимальной) реализации под каждую из платформ. Например какой-нибудь там asio под виндой работает через родной асинхронный интерфейс winapi. Ну так вот некоторые из таких платформозависимых библиотек Boost'а не имеют версий под Андроид.

B>про Context / Coroutines

B>вообще это интересно, вполне можно использовать
B>Технический практический вопрос:
B>Как именно сделать некий легковесный пул задач на корутинах?

Для реализации лёгких (их ещё часто называют зелёными) потоков сопрограммы не нужны. Для этого достаточно как раз переключателя контекстов. Сопрограммы — это нечто большее, что позволяет делать потоки с "несколькими входами".

B>Я так понимаю, корутины дают легковесное переключение "контекста" т.к оным там является переключение (сохранение/восстановление)

B>указателя инструкций + текущего стека + регистров.
B>И это эффективнее вызова планировщика ОС

Да, нормальное переключение системных потоков идёт через ядро ОС, что весьма тяжело. А такие лёгкие потоки потоки переключаются почти мгновенно, но у этого есть своя цена — у нас тут снова (как в первых версиях винды) получается кооперативная, а не вытесняющая многозадачность.

B>Плюс, позволяет писать более "синхронный" код, как в лекции про яндекс.карты.


Да, вот для написание асинхронного кода, выглядящего как синхронный, сопрограммы и нужны.

B>Интересно, как именно сделать "асинхронный фьючерс" и wait() — например, ожидание ввода-вывода, сети, результата работы другой корутины и т.д.


Ну вот например здесь http://rsdn.org/forum/philosophy/5353890.1
Автор: alex_public
Дата: 06.11.13
можно увидеть вариацию на тему. Правда там используется совсем старая версия бустовских сопрограмм (они с тех пор существенно изменились) и ключевая цель там чуть другая (обработка в UI потоке результатов неких асинхронных операций, каждая из которых представляют собой отдельные системные потоки, исполняющие синхронные операции).
Подождите ...
Wait...
Пока на собственное сообщение не было ответов, его можно удалить.