powered by simpleCommunicator - 2.0.50     © 2025 Programmizd 02
Форумы / Программирование [игнор отключен] [закрыт для гостей] / Легковесные последовательные подзадачи с возможностью блокировки
39 сообщений из 39, показаны все 2 страниц
Легковесные последовательные подзадачи с возможностью блокировки
    #39773341
Фотография Aklin
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Подскажите, куда копать.

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

Проблема в том, что в некий момент времени каждая задача может быть заблокирована на неопределенное время в определенном месте исполнения программы. А после снятия блокировки должна продолжить работу с того же места.
Сейчас это реализовано в виде нескольких функций, и счетчика. Блокируется переход с функции на функцию, а после снятия блокировки исполнение идет со следующей в списке функции.
Пока количество блокировок было мало, тащить этот зоопарк было просто. Сейчас же число блокировок начинает расти.

Использование потоков - крайне затратная конструкция в данном случае.
Общее число задач, исполняемых друг за другом - от одного до двух десятков.
В среднем за секунду исполняется от 30к до 1м задач.

=//=
...
Рейтинг: 0 / 0
Легковесные последовательные подзадачи с возможностью блокировки
    #39773355
Dima T
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Пул из N потоков создаешь при старте и дальше выполняй свои задачи в них.

Если задачи чисто вычислительные, то N равно количеству ядер проца, иначе N подбери опытным путем.

На каком ЯП написано? Нет смысла рассматривать эту задачу обобщенно, в разных ЯП разные инструменты для распараллеливания.
...
Рейтинг: 0 / 0
Легковесные последовательные подзадачи с возможностью блокировки
    #39773369
Фотография Aklin
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Dima TПул из N потоков создаешь при старте и дальше выполняй свои задачи в них.

Если задачи чисто вычислительные, то N равно количеству ядер проца, иначе N подбери опытным путем.

На каком ЯП написано? Нет смысла рассматривать эту задачу обобщенно, в разных ЯП разные инструменты для распараллеливания.Пул потоков не пойдет, потому что после полного цикла задач ABCDEF...Z перед повтором круга нужна полная синхронизация. А редко нужна и последовательная синхронизация, чтобы задачи A->B->C->... и только в таком порядке.

При скорости исполнения с 100к задач в секунду будет скажем 30к синхронизаций в секунду, пул потоков такое не вытянет.

С++, win/lin 86/64
...
Рейтинг: 0 / 0
Легковесные последовательные подзадачи с возможностью блокировки
    #39773372
Фотография Akina
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Задача должна иметь свойство, устанавливающее, что она заблокирована. Соответственно проверять на входе, и если блок - то сразу выход, а если нет, то выполняется. И соответственно она должна сама "вести" свой счётчик-свойство, буде надо. В общем, она должна быть самодостаточной.
Само собой, должен быть некий диспетчер, который запускает некую задачу, ждёт её завершения, после чего запускает следующую по циклу задачу. Вероятно, также с аналогичным свойством, блокирование коего аналогично блокированию сразу всех задач. Что он при этом будет делать - ждать разблокировки и продолжать, или завершаться - также может быть определено присвоенным этому свойству значением.
...
Рейтинг: 0 / 0
Легковесные последовательные подзадачи с возможностью блокировки
    #39773373
Фотография Akina
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Aklinперед повтором круга нужна полная синхронизацияТ.е. если какая задача была заблокирована, новый цикл не должен начинаться до тех пор, пока все блокированные в этом цикле задачи не будут разблокированы и выполнены? да в общем не влияет... ну немножко другой алгоритм в диспетчере.
...
Рейтинг: 0 / 0
Легковесные последовательные подзадачи с возможностью блокировки
    #39773393
Фотография Aklin
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
AkinaAklinперед повтором круга нужна полная синхронизацияТ.е. если какая задача была заблокирована, новый цикл не должен начинаться до тех пор, пока все блокированные в этом цикле задачи не будут разблокированы и выполнены? да в общем не влияет... ну немножко другой алгоритм в диспетчере.Нет.

Сначала доходим до конца цикла, дожидаемся все незаблокированные задачи, потом начинаем цикл заново, исполняя все незаблокированные задачи еще раз. Заблокированные же ждут пока их не разблокируют, после чего в следующем цикле продолжают свою работу с той точки, где были заблокированы.


AkinaЗадача должна иметь свойство, устанавливающее, что она заблокирована. Соответственно проверять на входе, и если блок - то сразу выход, а если нет, то выполняется. И соответственно она должна сама "вести" свой счётчик-свойство, буде надо. В общем, она должна быть самодостаточной.
Само собой, должен быть некий диспетчер, который запускает некую задачу, ждёт её завершения, после чего запускает следующую по циклу задачу. Вероятно, также с аналогичным свойством, блокирование коего аналогично блокированию сразу всех задач. Что он при этом будет делать - ждать разблокировки и продолжать, или завершаться - также может быть определено присвоенным этому свойству значением.Сейчас так примерно и сделано.
Проблема началась с того, что основная функция задачи начинает дергать функции ресурсов, при этом может уйти в глубину на 20-30 вызовов и где-то там в конце заблокироваться.

Чтобы продолжить с того же места придется каждый общий ресурс переделывать на атомарные подзадачки, а это практически переделка проекта с нуля.

Синхронизация на уровне ресурсов не требуется - ресурсы имеют довольно простую защиту с регулированием прав доступа. По крайней мере до тех пор, пока задачи исполняются последовательно хотя бы в рамках одного полного цикла.


Читаю пока про буст-корутины, буду пробовать, не могу сказать то ли это что нужно или не совсем...
...
Рейтинг: 0 / 0
Легковесные последовательные подзадачи с возможностью блокировки
    #39773401
Dimitry Sibiryakov
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
AklinПри скорости исполнения с 100к задач в секунду будет скажем 30к синхронизаций в секунду, пул потоков такое не вытянет.
Вытянет, никуда не денется. Создаёшь очередь задач и поток, который задачу из очереди выбирает и исполняет. Соответственно задачи жёстко выполняются в том порядке в котором ты их в очередь засунул.

Не знаю что ты называешь "полной синхронизацией", но всё решается недобавлением задачи Х в очередь пока задача У не прислала квиток о своём выполнении.
...
Рейтинг: 0 / 0
Легковесные последовательные подзадачи с возможностью блокировки
    #39773404
alex55555
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
AklinПроблема в том, что в некий момент времени каждая задача может быть заблокирована на неопределенное время в определенном месте исполнения программы. А после снятия блокировки должна продолжить работу с того же места.
Сейчас это реализовано в виде нескольких функций, и счетчика. Блокируется переход с функции на функцию, а после снятия блокировки исполнение идет со следующей в списке функции.
Пока количество блокировок было мало, тащить этот зоопарк было просто. Сейчас же число блокировок начинает расти.
В чём проблема-то? Что там "начинает расти"? Может чисто психологический дискомфорт, а не реальная проблема?
AklinИспользование потоков - крайне затратная конструкция в данном случае.
Откуда такие данные?
AklinОбщее число задач, исполняемых друг за другом - от одного до двух десятков.
В среднем за секунду исполняется от 30к до 1м задач.
Сколько там в очереди на последовательную обработку - не интересно. Интереснее сколько очередей. Их не более 20. То есть нужно как-то планировать исполнение не более 20 потоков. Ну и в чём проблема-то? Оно даже уже реализовано, оно работает, но что-то не устраивает, только вот сформулировать не получается. Поэтому нужно терзать вопросами до появления понимания - чего, собственно, не нравится-то?
...
Рейтинг: 0 / 0
Легковесные последовательные подзадачи с возможностью блокировки
    #39773405
Фотография Aklin
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Dimitry SibiryakovAklinПри скорости исполнения с 100к задач в секунду будет скажем 30к синхронизаций в секунду, пул потоков такое не вытянет.
Вытянет, никуда не денется. Создаёшь очередь задач и поток, который задачу из очереди выбирает и исполняет. Соответственно задачи жёстко выполняются в том порядке в котором ты их в очередь засунул.

Не знаю что ты называешь "полной синхронизацией", но всё решается недобавлением задачи Х в очередь пока задача У не прислала квиток о своём выполнении.Я понял.
Думал речь идет про ОС-потоки.


Сейчас по сути так и сделано.
Есть список активных задач, который просто по кругу вращается.
Проблема вот в чем.
Задача начинает дергать функции ресурсов, порой на глубину в 20-30 вызовов и где-то там может быть заблокирована. Вернуться в основной цикл и передать управление на следующей в списке задаче несложно.
Сложно продолжить исполнение с той точки, где произошла блокировка. Приходится вводить множество различных счетчиков состояний чуть ли не на каждом уровне вызова, а потом еще не запутаться в них (состояние еще будет зависеть от вызывающего и т.д.).
...
Рейтинг: 0 / 0
Легковесные последовательные подзадачи с возможностью блокировки
    #39773410
Фотография Aklin
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
alex55555Сколько там в очереди на последовательную обработку - не интересно. Интереснее сколько очередей. Их не более 20. То есть нужно как-то планировать исполнение не более 20 потоков. Ну и в чём проблема-то? Оно даже уже реализовано, оно работает, но что-то не устраивает, только вот сформулировать не получается. Поэтому нужно терзать вопросами до появления понимания - чего, собственно, не нравится-то?Потоков каких - ОС-потоков?
...
Рейтинг: 0 / 0
Легковесные последовательные подзадачи с возможностью блокировки
    #39773435
Фотография Akina
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
AklinСначала доходим до конца цикла, дожидаемся все незаблокированные задачине понял, как это соотносится с исходным
Aklinряд задач, выполняются они последовательно
Я понимаю "последовательно" так, что только по завершении задача возвращает упраление диспетчеру, который запустит следующую... я неправ?
Aklinосновная функция задачи начинает дергать функции ресурсов, при этом может уйти в глубину на 20-30 вызовов?? задачи вызывают друг друга? что за ресурсы, откуда цепной вызов? или рекурсия, что один хрен...
...
Рейтинг: 0 / 0
Легковесные последовательные подзадачи с возможностью блокировки
    #39773448
Dima T
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
AklinDima TПул из N потоков создаешь при старте и дальше выполняй свои задачи в них.

Если задачи чисто вычислительные, то N равно количеству ядер проца, иначе N подбери опытным путем.

На каком ЯП написано? Нет смысла рассматривать эту задачу обобщенно, в разных ЯП разные инструменты для распараллеливания.Пул потоков не пойдет, потому что после полного цикла задач ABCDEF...Z перед повтором круга нужна полная синхронизация. А редко нужна и последовательная синхронизация, чтобы задачи A->B->C->... и только в таком порядке.

При скорости исполнения с 100к задач в секунду будет скажем 30к синхронизаций в секунду, пул потоков такое не вытянет.

С++, win/lin 86/64
Вытянет, ты просто не понимаешь что такое пул потоков и для чего он нужен.

Но подозреваю что это решение тебе не подойдет, т.к. (если я правильно понял) сейчас у тебя все сделано однопоточно, следовательно скорее всего код не потокобезопасный, т.е. переделка на многопоточный вариант будет достаточно трудоемкой.
...
Рейтинг: 0 / 0
Легковесные последовательные подзадачи с возможностью блокировки
    #39773453
Dima T
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
AklinЗадача начинает дергать функции ресурсов, порой на глубину в 20-30 вызовов и где-то там может быть заблокирована. Вернуться в основной цикл и передать управление на следующей в списке задаче несложно.
Я правильно понимаю что есть цепочки задач с подзадачами например:
1. A()->B()->C()
2. D()->E()
Допустим первая "зависла" на вызове С и ты в этот момент хочешь вернуться в основной цикл и запустить вторую, потом закончить первую?
...
Рейтинг: 0 / 0
Легковесные последовательные подзадачи с возможностью блокировки
    #39773459
Фотография mayton
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
AklinВ среднем за секунду исполняется от 30к до 1м задач.

При одном миллионе задач в секунду у нас длительность одного сеанса задачи = 1мс.
Это та самая граница где КМК надо уходить от мультизадачности в другую сторону.
Сабж у нас был на эту тему.
...
Рейтинг: 0 / 0
Легковесные последовательные подзадачи с возможностью блокировки
    #39773465
Фотография Aklin
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
AkinaAklin?? задачи вызывают друг друга? что за ресурсы, откуда цепной вызов? или рекурсия, что один хрен...Задачи не вызывают друг друга.
Задачи могут дергать одни и те же ресурсы.
После завершения или блокировки задачи управление возвращается в диспетчер.
После разблокировки задачи надо продолжить с того же места, на котором задача встала, включая всю иерархию стеков.

Dima TЯ правильно понимаю что есть цепочки задач с подзадачами например:
1. A()->B()->C()
2. D()->E()
Допустим первая "зависла" на вызове С и ты в этот момент хочешь вернуться в основной цикл и запустить вторую, потом закончить первую?
ABCDE - задачи, abcde - ресурсы.

Нормальное исполнение (с учетом ресурсов) будет примерно такое:
(SCHEDULER) -> A(a(b(c(d(...(e))))) -> (SCHEDULER) -> B(c(d(a(b)))) -> (SCHEDULER) -> C(d(g(a)c)))) -> (SCHEDULER) -> A(a(b(c(d[BLOCK] -> (SCHEDULER) -> B(...) -> ... -> (SCHEDULER) -> [BLOCK](e))))) -> ...

Собственно при следующем исполнении задачи А нужно начать с того же места где она была заблокирована, не повторяя весь ее путь с начала.

Как сделать так, чтобы повторить с начала я знаю, сейчас так и реализовано. Но сейчас число блокировок одна штука и она простая, поэтому повторить весь путь с начала несложно. При этом добавляются и другие виды блокировок, поэтому при том же подходе придется переделывать почти всю логику ресурсов и задач, это несколько месяцев человеко-часов в лучшем случае... Вот я и думал какие методы сохранения и развертки стека есть...
...
Рейтинг: 0 / 0
Легковесные последовательные подзадачи с возможностью блокировки
    #39773467
Фотография Aklin
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
maytonAklinВ среднем за секунду исполняется от 30к до 1м задач.

При одном миллионе задач в секунду у нас длительность одного сеанса задачи = 1мс.
Это та самая граница где КМК надо уходить от мультизадачности в другую сторону.
Сабж у нас был на эту тему.Про современную многозадачность который?

Пытаюсь осилить, пока плохо дается.


от 30к до 1м - это реальное исполнение числа задач в секунду. Но тут правда оговорка.
Задачи есть всегда, то есть конвейер задач забит, и процессор постоянно что-то молотит. В зависимости от сложности задачи ее исполнение занимает чуть больше или чуть меньше времени. Если все задачи закончились, значит программа завершена.

А не так, что если нет задач, то программа прохлаждается.
...
Рейтинг: 0 / 0
Легковесные последовательные подзадачи с возможностью блокировки
    #39773469
Фотография mayton
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
При твоей архитектуре тебе нужна легковесная очередь заданий.

И некоторый набор потоков которые выхватывают из этой очереди пачки заданий (по 1000 штук)
и исполняют. Размер пачки можно регулировать.

Набор потоков должен быть запасом чтоб потоки-неудачники могли спокойно висеть на 1 задаче
а их работу подхватят другие.
...
Рейтинг: 0 / 0
Легковесные последовательные подзадачи с возможностью блокировки
    #39773480
Dima T
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
AklinABCDE - задачи, abcde - ресурсы.

Нормальное исполнение (с учетом ресурсов) будет примерно такое:
(SCHEDULER) -> A(a(b(c(d(...(e))))) -> (SCHEDULER) -> B(c(d(a(b)))) -> (SCHEDULER) -> C(d(g(a)c)))) -> (SCHEDULER) -> A(a(b(c(d[BLOCK] -> (SCHEDULER) -> B(...) -> ... -> (SCHEDULER) -> [BLOCK](e))))) -> ...

Собственно при следующем исполнении задачи А нужно начать с того же места где она была заблокирована, не повторяя весь ее путь с начала.

Как сделать так, чтобы повторить с начала я знаю, сейчас так и реализовано.
Можно перед запуском задачи нужные ресурсы блокировать? Т.е. запустил задачу, в начале получил все необходимые ресурсы, затем сделал полезную работу. Если ресурсы не получил, то перешел к следующей задаче и т.д. ИМХО так можно будет повторно запускать с начала, а не с середины.
AklinВот я и думал какие методы сохранения и развертки стека есть...
Мне кажется нет ничего хорошего в этом направлении. По сути ты изобретаешь собственную многопоточность. В этом случае проще разобраться как пользоваться уже имеющейся (потоки ОС).
...
Рейтинг: 0 / 0
Легковесные последовательные подзадачи с возможностью блокировки
    #39773484
Фотография Aklin
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Dima TТ.е. запустил задачу, в начале получил все необходимые ресурсы, затем сделал полезную работу.
На начало работы задачи я, во-первых, не знаю какие там будут использованы ресурсы (не, конечно можно продублировать работу задачи, сделав две ветки: выделение ресурсов как предварительное исполнение и само исполнение как таковое, но смысла в этом не вижу пока что), а во-вторых, блокировка ресурсов зависит от результата работы многих задач, я заранее это никак не отслежу, пока не попытаюсь достучаться до ресурса.
...
Рейтинг: 0 / 0
Легковесные последовательные подзадачи с возможностью блокировки
    #39773487
Фотография Aklin
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Dima TМне кажется нет ничего хорошего в этом направлении. По сути ты изобретаешь собственную многопоточность. В этом случае проще разобраться как пользоваться уже имеющейся (потоки ОС).Сейчас пытаюсь сочинить пример попроще, для оценки возможностей пула потоков и времени их переключения.

Пока что у меня ощущение что время переключения одного потока соизмеримо с временем работы одной задачи. А останов пустых потоков занимает больше времени чем исполнение сотни задач. Не могу точно сказать, как заработает пример - будет яснее...
...
Рейтинг: 0 / 0
Легковесные последовательные подзадачи с возможностью блокировки
    #39773493
Dima T
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
AklinDima TМне кажется нет ничего хорошего в этом направлении. По сути ты изобретаешь собственную многопоточность. В этом случае проще разобраться как пользоваться уже имеющейся (потоки ОС).Сейчас пытаюсь сочинить пример попроще, для оценки возможностей пула потоков и времени их переключения.

Пока что у меня ощущение что время переключения одного потока соизмеримо с временем работы одной задачи. А останов пустых потоков занимает больше времени чем исполнение сотни задач. Не могу точно сказать, как заработает пример - будет яснее...
Пул потоков нужен чтобы не создавать потоки и не останавливать. Это заранее созданные потоки, которые висят и ждут когда ты в них что-то запустишь.

Что касается переключения потоков, то тут ты похоже тоже недопонимаешь как оно работает.

Делай пример такой чтобы тут можно было его показать, с реальным кодом проще обсуждать.
...
Рейтинг: 0 / 0
Легковесные последовательные подзадачи с возможностью блокировки
    #39773506
Dimitry Sibiryakov
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
AklinЗадача начинает дергать функции ресурсов, порой на глубину в 20-30 вызовов и где-то там может быть заблокирована.
А вот это плохо. Надо найти причину блокировки и убить. Насмерть.
...
Рейтинг: 0 / 0
Легковесные последовательные подзадачи с возможностью блокировки
    #39773513
Фотография Aklin
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Dima TЭто заранее созданные потоки, которые висят и ждут когда ты в них что-то запустишь.Я боюсь, что пары-тройки потоков мне может не хватить (в случае, например, если десяток будут висеть на заблокированных задачах), а делать 30 потоков, которые выжирают процессор под ноль мне нельзя...


Dimitry SibiryakovА вот это плохо. Надо найти причину блокировки и убить. Насмерть.
Как раз не надо. Блокировка задачи - ожидаемое поведение, а не проблема. Задачу в какой-то момент нужно приостановить до определенной отмашки.
...
Рейтинг: 0 / 0
Легковесные последовательные подзадачи с возможностью блокировки
    #39773526
Dima T
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
AklinЯ боюсь, что пары-тройки потоков мне может не хватить (в случае, например, если десяток будут висеть на заблокированных задачах), а делать 30 потоков, которые выжирают процессор под ноль мне нельзя...
Говнокод писать нельзя, а потоков хоть 300 запускай, при простое они не займут твой процессор.
Поучи матчасть. Читай про синхронизацию потоков, выделение потокам процессорного времени и т.д.
Лучше в целом что-нибудь почитай про устройство многопоточности в ОС. Например Рихтера Windows via C/C++ . Хоть там про виндовс, но подходы те же что и в линуксе.
...
Рейтинг: 0 / 0
Легковесные последовательные подзадачи с возможностью блокировки
    #39773534
Фотография mayton
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Так он же пишет
С++, win/lin 86/64
...
Рейтинг: 0 / 0
Легковесные последовательные подзадачи с возможностью блокировки
    #39773549
Хитроглазый
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Aklin,
а что с ресурсами происходит пока задача заблокирована?
остаются занятыми? дедлоков не боитесь?
...
Рейтинг: 0 / 0
Легковесные последовательные подзадачи с возможностью блокировки
    #39773558
Хитроглазый
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Aklin,

а в целом совсем не ясно в чём вы видите проблему.

Aklinчисло блокировок начинает расти.
и что?
...
Рейтинг: 0 / 0
Легковесные последовательные подзадачи с возможностью блокировки
    #39773626
Фотография Aklin
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
ХитроглазыйAklin,
а что с ресурсами происходит пока задача заблокирована?
остаются занятыми? дедлоков не боитесь?Нет, ресурс блокирует определенную задачу, но при этом продолжает отвечать остальным задачам. Даже если дедлок будет (хотя это скорее невероятно чем маловероятно), то это можно считать нормальным поведением.


ХитроглазыйAklin,

а в целом совсем не ясно в чём вы видите проблему.

Aklinчисло блокировок начинает расти.
и что?Сложность кода ресурсов и самих задач должна быть увеличена раз в десять чтобы обрабатывать новые запросы...



В общем пока без примера мне не удается нормально описать видимо...
...
Рейтинг: 0 / 0
Легковесные последовательные подзадачи с возможностью блокировки
    #39773630
Фотография mayton
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Aklin,

Ты можешь опубликовать макет этого приложения? Разумеется без бизнес тайн.
...
Рейтинг: 0 / 0
Легковесные последовательные подзадачи с возможностью блокировки
    #39773639
Фотография Anatoly Moskovsky
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
AklinПосле завершения или блокировки задачи управление возвращается в диспетчер.
После разблокировки задачи надо продолжить с того же места, на котором задача встала, включая всю иерархию стеков.
Корутины позволяют как раз это - прервать выполнение на произвольном уровне вложенности вызовов, а потом продолжить с того же места, включая состояние локальных переменных.
...
Рейтинг: 0 / 0
Легковесные последовательные подзадачи с возможностью блокировки
    #39773803
alex55555
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
AklinПотоков каких - ОС-потоков?
ОС рулит, во первых - процессами. Во вторых - потоками. Процесс включает кучу потоков. Процессом обычно является одно приложение, внутри которого может быть много потоков. В инглише это process и thread. И очень печально, что ты этих азов не знаешь.
...
Рейтинг: 0 / 0
Легковесные последовательные подзадачи с возможностью блокировки
    #39773806
Фотография Aklin
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
alex55555И очень печально, что ты этих азов не знаешь.
Речь не про это.
Речь про различие между каким-нибудь fiber и thread или coroutine
...
Рейтинг: 0 / 0
Легковесные последовательные подзадачи с возможностью блокировки
    #39773819
Фотография mayton
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Aklinalex55555И очень печально, что ты этих азов не знаешь.
Речь не про это.
Речь про различие между каким-нибудь fiber и thread или coroutine
Давай вернем топик в конструктив.

Разумеется тебя может забавлять, когда эксперты безо-всякой конкретики начинают говорить
о том что у них наболело. И я тоже могу поговорить. И так будет еще 100 страниц.

Есть единственный верный кейс как решить твою проблему. Смоделировать ее на макете.
И опубликовать его.

Это - конструктив.
...
Рейтинг: 0 / 0
Легковесные последовательные подзадачи с возможностью блокировки
    #39773847
Siemargl
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Специально на этот случай придумано.

https://ru.cppreference.com/w/cpp/thread/condition_variable

Производительность можно потестить - известно, что на win/lin скорости переключения и затраты могут быть разными в разы.

Тогда еще есть фиберсы.
...
Рейтинг: 0 / 0
Легковесные последовательные подзадачи с возможностью блокировки
    #39773864
Dimitry Sibiryakov
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
AklinЗадачу в какой-то момент нужно приостановить до определенной отмашки.
Нет, это проблема. Такую задачу надо разбить на две: первая выполняется до упора, вторая запускается по отмашке.
...
Рейтинг: 0 / 0
Легковесные последовательные подзадачи с возможностью блокировки
    #39773904
Фотография Малыхин Сергей
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Без кода гадать можно долго но пока выглядит как переизобретение эвентлупа OR оконной процедуры OR главного цикла. кому как больше нравится.
Задачи берутся с начала очереди выполняются если задача сейчас выполнится не может то задача переносится в конец очереди. Пусть попозже попробует выполнится.
Или же функция обратного вызова пусть возвращает задачу в очередь.
...
Рейтинг: 0 / 0
Легковесные последовательные подзадачи с возможностью блокировки
    #39774171
kealon(Ruslan)
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Aklin,

coroutine(fiber) самое то, состояния скрыть помогают хорошо
но жрут....
...
Рейтинг: 0 / 0
Легковесные последовательные подзадачи с возможностью блокировки
    #39774178
Фотография mayton
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Подождем автора. Надеюсь ... макет уже близок к концу?

Кстате вероятен факт что в процессе формализации макета (неожиданно!) всплывут версии
по улучшению и наши советы станут не нужны.
...
Рейтинг: 0 / 0
Легковесные последовательные подзадачи с возможностью блокировки
    #39774230
kealon(Ruslan)
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
mayton,

когда встаёт вопрос как соединить "несколько логических потоков вычислений" в один, то решений немного:
либо физическая изоляция в нити, а это всегда заведомо избыточные ресурсы

либо стейт-машина

В ручную реализацию во втором варианте, при более менее сложной логике, я не верю, количество состояний растёт экспоненциально.
Т.е. он конечно выгоднее по ресурсам, но без кодогенерации делать там особо нечего. В частной задаче это познания во "всемилюбимом" SUBSET_CONSTRUCTION + каком нибудь алгоритме минимизации стэйтов, типа Бржозовского.

Если пишется не что-то типа NGINX, то хз, стоит ли овчинка выделки.
...
Рейтинг: 0 / 0
39 сообщений из 39, показаны все 2 страниц
Форумы / Программирование [игнор отключен] [закрыт для гостей] / Легковесные последовательные подзадачи с возможностью блокировки
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


Просмотр
0 / 0
Close
Debug Console [Select Text]