Сколько ядер нужно для обработки миллиона пользователей за 4 часа, если расчет одного пользователя занимает 1 секунду?
Что проверяют
Считаете ли вы вслух и делаете ли поправку на реальность. Арифметика тут на один шаг, интересно другое: какие уточняющие вопросы вы зададите, помните ли про глобальную блокировку интерпретатора и закладываете ли запас. Это оценочная задача, и проверяют метод, а не точность до ядра.
Как отвечать
Сначала нижняя граница. Миллион задач по секунде это миллион процессорных секунд, четыре часа это 14400 секунд, значит нужно примерно 69,4 ядра, то есть 70 при полной загрузке и идеальном распределении.
Дальше объясняете, почему 70 это ещё не ответ:
- уточните, секунда это счёт или ожидание сети и базы. Если ожидание, ядра почти не нужны, задача решается асинхронностью;
- в CPython потоки не дают параллелизма на счётных задачах, нужны процессы:
multiprocessingили очередь с воркерами, примерно по процессу на ядро; - миллион мелких задач дорого обходится на диспетчеризации и сериализации, считайте пачками;
- секунда это среднее или медиана, а срок определяет хвост распределения;
- заложите запас на перезапуски упавших задач и целевую загрузку около восьмидесяти процентов.
Итог звучит вилкой: порядка девяноста ядер с запасом, и это при условии, что общая база выдержит столько параллельных клиентов.
Где спотыкаются
Останавливаются на делении и округляют до 70 ядер. Точность тут ложная: план без запаса упирается в срок на первой же пачке повторов.
Планируют потоки вместо процессов. На счётной нагрузке в CPython потоки почти не ускоряют работу, а режим без глобальной блокировки пока экспериментальный, и опираться на него в проде рано.
Забывают про общий ресурс. Семьдесят процессов одновременно идут в одну базу, и узким местом становится она, а не ядра: считать надо всю цепочку, а не только расчёт.