Если ваша операционная система не была спроектирована с нуля, чтобы быть ОС реального времени (например, Xenomai или VxWorks ), вы будетеобнаружите, что планировщик ОС предоставляет очень, очень мало гарантий относительно того, когда ваши потоки будут работать, или как долго они будут продолжать работать после того, как они будут работать.
Учитывая вышеизложенное, вполне вероятно, чтоНаличие других потоков на том же компьютере (будь то потоки внутри вашего собственного процесса или потоки в других процессах) будет влиять на количество процессорного времени, которое получают ваши собственные потоки.Например, если другие потоки работают с более высоким приоритетом, чем ваши потоки, и существует конфликт между ядрами ЦП (т. Е. В конкретный момент времени нужно запустить больше потоков, чем имеется ядер ЦП для их запуска), тогда планировщик будетсбросить один из запущенных потоков с его текущего ядра ЦП до того, как истечет его квант, чтобы теперь готовый к запуску поток с более высоким приоритетом мог начать выполняться немедленно.
В общем, ответ на этот видВопрос заключается в разновидности «там будут драконы» - то есть, если вы написали свою многопоточную программу правильно, то вам не нужно знать (или заботиться) о том, какие квантовые размеры получают ваши потоки, как должен делать ваш код.быть в состоянии работать правильно независимо от того, как именно планировщик раздает временные срезы потокам.
(Исключение составляют случаи, когда абсолютно необходимо поведение в реальном времени ; в этом случае вы, вероятно, захотитеработать в операционной системе реального времени, которая может предоставить вам необходимые гарантии)
Что касается того, сколько времени требуется планировщику, чтобы определить, какой поток должен быть запущен, наличие большего количества потоков увеличивает накладные расходы планировщика, но в большинстве операционных систем увеличение очень незначительно - алгоритм планирования равен O(log N)
или даже * 1018.* относительно количества потоков.Конечно, вы все равно можете заставить компьютер «удариться о стену», если будете продолжать добавлять больше потоков на неопределенное время, но предел, который вы в конечном итоге достигнете, скорее будет связан с исчерпанием ОЗУ, чем с производительностью алгоритма планирования.