Fedir
😂
Vlad
Всем привет
Есть некоторый пул потоков, реализованный на основе вектора из thread
Есть некоторая очередь с задачами
Взаимодействие между ними налажено, всё более-менее работает
На текущий момент поток ждёт notify_one, после чего хватает очередь, блокирует её, берёт задачу и разблокирует для дальшейших потоков, которые так же в состоянии ожидания
Стоит задача: Нужно модернизировать систему так, чтобы число потоков было ограниченным (допустим, сделаю 4 потока, по ядру на каждый) и сделать балансировку задач, которые лежат в очереди, между потоками
Мысли:
Разделить количество задач между потоками (допустим, есть 12 задач, на каждый поток будет отводится по 3, соответственно).
Для этого нужно либо завести на каждый поток свою очередь, куда закинуть задачи только для данного потока, либо как-то ещё. Отчего-то эта идея кажется плохой, но в голову другой не идёт.
Помогите, пожалуйста, как это лучше спланировать.
Вопрос:
Как лучше поступить?
Fedir
concurent queue реализуй
Fedir
Когда один из потоков выполнил задачу, то сразу выхватывает следующую из очереди
Ostap ꑭ
Всем привет
Есть некоторый пул потоков, реализованный на основе вектора из thread
Есть некоторая очередь с задачами
Взаимодействие между ними налажено, всё более-менее работает
На текущий момент поток ждёт notify_one, после чего хватает очередь, блокирует её, берёт задачу и разблокирует для дальшейших потоков, которые так же в состоянии ожидания
Стоит задача: Нужно модернизировать систему так, чтобы число потоков было ограниченным (допустим, сделаю 4 потока, по ядру на каждый) и сделать балансировку задач, которые лежат в очереди, между потоками
Мысли:
Разделить количество задач между потоками (допустим, есть 12 задач, на каждый поток будет отводится по 3, соответственно).
Для этого нужно либо завести на каждый поток свою очередь, куда закинуть задачи только для данного потока, либо как-то ещё. Отчего-то эта идея кажется плохой, но в голову другой не идёт.
Помогите, пожалуйста, как это лучше спланировать.
Вопрос:
Как лучше поступить?
https://github.com/cameron314/concurrentqueue
Ostap ꑭ
Вместо тысячи слов
Fedir
таки да
Vlad
Открыл заголовочник, стало страшно
Я буду честен, хотя тут таких не любят - это задание, которое будет проверять преподаватель
Система уже готова, нужно только в неё внести правки
Т.е. реализовывать что-то с нуля - нет времени, хотя сейчас понимаю, что так было бы лучше
Если вам не сложно, подскажите, пожалуйста, в какую сторону решения копать
Если вдруг кто-то с таким сталкивался
Ostap ꑭ
Открыл заголовочник, стало страшно
Я буду честен, хотя тут таких не любят - это задание, которое будет проверять преподаватель
Система уже готова, нужно только в неё внести правки
Т.е. реализовывать что-то с нуля - нет времени, хотя сейчас понимаю, что так было бы лучше
Если вам не сложно, подскажите, пожалуйста, в какую сторону решения копать
Если вдруг кто-то с таким сталкивался
https://github.com/progschj/ThreadPool здесь просто идеальный код, смотри как работает конд_вар
Chebyrash
Ostap ꑭ
Как запрограммируешь
Ostap ꑭ
Но такого, как ГИЛ в питоне нету
Vlad
У меня реализация по этому же примеру, по нему делал свой пул.
Переменные состояния тоже заюзал, т.е. поток, что ожидает - получает уведомление, что можно брать задачу, если ссылается на очередь (а на очередь этот сукин сын точно ссылается)
Получается, нагрузка у меня и так балансируется?
Vlad
Чего же тогда преподу не понравилось)
Ostap ꑭ
Потому-что, очевидно, что большинство считает, что эффективно - это когда равное количество задач на каждый поток
Ostap ꑭ
Но это заблуждение
Ostap ꑭ
Как только поток освобождается - он захватывает новую задачу
Vlad
Я очень надеюсь завтра (ух ты ж ё, уже сегодня) ему это доказать. Спасибо, допилю пока отчёт, разжую все моменты.
Ostap ꑭ
Чтобы доказать, сделай элементарную функцию с числами Фибоначчи
Ostap ꑭ
И сделай замеры по времени
Ostap ꑭ
Нагружая очередь
Vlad
У меня умножение матрицы на матрицу, по блокам разбивал.
Но на фибоначчи - да, проще будет. Так и сделаю.
Constantine
Vlad
У меня обработка в очереди стоит на это дело. Тут в коде всё прозрачно, но само собой это только пул. Очередь отдельно пилил.
Constantine
Ostap ꑭ
Constantine
Там конкретно не нравится, что по сути лишний shared_ptr остается в enqueue
blow
Ну что, спокойной ночи
Stanislav
хм, господа, такой вопрос
Stanislav
а кто нибудь gitlab ci плотно юзает?
Stanislav
вопрос вот в чем, я его юзал и это было ок, но там были разные проекты и каждый под свою ос собирался, и тут задумался как единиым .gitlab-ci.yml собирать проект под винду и линукс
Кирилл
Stanislav
Stanislav
проблема вот в чем, там где ты пишешь скрипт ты пишешь либо bash либо cmd
Stanislav
и я не нашел в доках как это раскидать
Stanislav
мб можно два файла .yml сделать для разных воркеров, надо рыть
Stanislav
и причем тут енв? в cmd и шелле они по разному обрабатываются, можно словить ошибочку
Stanislav
это не совсем то
Кирилл
WSL?
Stanislav
WSL?
ну здрасьте, как тестить сборку под рхел? )
Stanislav
вопрос то был как сделать так чтоб под виндой и линухом собиралось)
Stanislav
ладно, сам покопаю еще, или даже запатчу гитлаб
Aidar
как юзать coroutines2 с asio?
Aidar
я правильно думаю что примерно никак?
Stanislav
Stanislav
Полухин в одной из последних статей на хабре приводил пример coroutines + network
Aidar
можно ссылку?
Vladimir
Asio уже содержит корутины доки читай по asio srand
Aidar
я хотел этого избежать но coroutines1 deprecated
Eugene
@crackedmind, тут человеку поддержка нужна
Stanislav
нет человека, нет поддержки
Eugene
Stanislav
Stanislav
Vladimir
Использование Boost.Asio с Coroutines TS
https://habrahabr.ru/post/348602/
Aidar
Aidar
может я чото не понимаю но вижу уже 4 вида корутин
Aidar
кажись придется обернуть asio в корутины велосипедами
Aidar
кажись забью и заюзаю coroutines1
Stanislav
Aidar
эээ, это какие?
coroutines1, coroutines2, coroutinesTS, io_context от asio
Aidar
coroutines1 не входит в последнее потомучто deprecated
Stanislav
Anonymous
нужен программист с++
Anonymous
допилить софт
Aidar
даже за деньги
Anonymous
Stanislav
а как адекватно ?
"Объявления о вакансиях и новости по евентам - в лс @AlexFails."
Aidar
@AlexFails может канал фриланса? или в projobs?
Stanislav
читаем правила