"Возьмем веб-сервис, который проверяет доступен ли сайт в данный момент или нет.
Но как быть, если таких сайтов надо проверять несколько тысяч и проверять нужно раз в минуту?"
Возьмем хлебокомбинат и магазин возле вашего дома, и нужно раз в минуту привозить ящик батонов.
Но как быть, если нужно раз в минуту привозить 12 вагонов?
НИКАК, тут даже постройка железной дороги не поможет, потому что разгрузить их не выйдет.
Ставить нужно реалистичные задачи.
Нужно четко понимать, что какие бы быстрые не были процессоры и линии связи, везде есть ограничения, и следует искать варианты, которые устроили - в том числе и в самом изначальном условии задачи, например выделять на проверку не минуту, а 10 минут, 30 минут, час.
Конечно можно оптимизировать, найти реальное решение проблемы. Например вместо curl использовать ping, но это проверит только доступность хоста, а не сайта. Можно по ssh запрашивать состояние сервера, или сделать наоборот - чтобы каждый сайт сам отчитывался с определенной периодичностью, тогда проверять нужно будет только те, которые вовремя не отчитались.
В общем гораздо проще выполнять практические задачки, если они имеют какое-то практическое применение, тогда у вас постановка задачи будет реалистичная и достижение результата будет ВАМ понятным.