Alex_Wells
@Alex_Wells
PHP/Kotlin

Запустить N разных очередей по X каждой на Z потоков?

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

Вопрос: что произойдет если на 8 поточном CPU, запущу 20 очередей в 20 sub-процессах, задача каждой из которых - производить асинхронные операции (то есть не тратя процессорное время)? Как распределится нагрузка по ядрам? Насколько это хороший подход? Прийдется ли написать какую-то систему распределения по sub-процессах для процессинга нескольких очередей в одном процессе, дабы в общем кол-ве их было 8?
  • Вопрос задан
  • 92 просмотра
Решения вопроса 1
profesor08
@profesor08
Хоть 100 запускай, они распределятся примерно поровну, если один подвиснет, то остальные продолжат работу.
Ответ написан
Пригласить эксперта
Ответы на вопрос 2
@Xilian
Программист 1С, сетевые технологии, SQL
>>производить асинхронные операции (то есть не тратя процессорное время)

С чего это асинхронные операции перестали тратить процессоров время? Просто поток не будет блокироваться. В конечном итоге у тебя все равно все упрёться в планировщик MySQL - у него свое мнение, как потоки распределять.
Ответ написан
производить асинхронные операции (то есть не тратя процессорное время)
Где они по твоему обрабатываются? В южном мосте?

Как распределится нагрузка по ядрам?
Как настроишь сервер: NUMA, планировщик ОС, сторонние процессы на сервере, настройки целевого приложения.

В MySQL один запрос - один процесс. Что будет внутри процесса, на откуп планировщика MySQL.
Ответ написан
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Похожие вопросы