powered by simpleCommunicator - 2.0.61     © 2026 Programmizd 02
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Форумы / Программирование [игнор отключен] [закрыт для гостей] / Многопоточность. Насколько вычисления в 30 потоках дороже вычислений в 4?
4 сообщений из 4, страница 1 из 1
Многопоточность. Насколько вычисления в 30 потоках дороже вычислений в 4?
    #37640763
Системы завоза тонн плова
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Если на машине всего 4 ядра, то при необходимости обработки 30 очередей заданий нет смысла запускать 30 потоков. В современных HTTP-серверах, как я знаю, никогда не запускается потоков больше, чем кол-во ядер, но в HTTP-серверах количество соединений очень велико, поэтому разницу между 4 потоками и сотнями тысяч потоков (если бы по 1 потоку на соединение) разработчик HTTP-сервера увидит невооружённым глазом. Это всё мои предположения.

Меня интересует разница между 4, 30 и 100000 НЕСПЯЩИМИ потоками в системе (спящие можно не учитывать, т.к. насколько я понимаю, шедулер им не передаёт управление вообще, пока они в особом состоянии спанья, например таймер ждут, который раз в секунду срабатывает или пакет в сетевуху).

Когда конфигуришь ядро, там есть число - частота переключений потоков (процессов, потоки в linux переключаются тем же "движком", что и процессы). Допустим там стоит 250 Гц.

То есть ядро ставит таймер на 1/250 и по прерыванию шедулер передаёт управление новому неспящему потоку.

Правильно я понимаю, что если у меня 250 неспящих потоков, выполняющих одни и те же суровые вычисления и одно ядро ЦП, то каждый будет получать управление раз в секунду на интервал, равный 1/250 секунды? А если у меня 2 потока, то каждый в течение 1с получит управление 125 раз на 1/250 сек?

Верно ли то, что сколько бы потоков в системе у меня ни было (1 или 1000000), операция переключения потоков (в коде шедулера) будет жрать одно и то же количество процессора? Ведь она тупо выполняется с частотой 250 Гц. С повышением количества потоков каждый поток просто будет иметь меньше времени, да?

А вот в каком направлении думать, когда мне интересно, какая разница между такими схемами:

Есть 100 очередей заданий и 2 ядра. Я могу запустить 2 потока, в которых по очереди брать задание из очереди или запустить 100 потоков, в каждом из которых сразу начать обрабатывать одно задание?

Все слышали такое выражение, что переключение контекста - это дорого. Но современные OS не юзают автоматику TTS, сами копируют содержимое регистров туда-обратно, но таких операций в целом всего 250 в секунду. Неужели это дорого? Может быть смысл этого выражения в том, что сбивается кеш или конвееры ЦП? Кто в курсе? :)
...
Рейтинг: 0 / 0
Многопоточность. Насколько вычисления в 30 потоках дороже вычислений в 4?
    #37641112
Фотография ZyK_BotaN
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Системы завоза тонн плова,

зависит от операционной системы.
если программа сетевая - то удобно юзать зеленые треды. там накладные расходы слабые.
...
Рейтинг: 0 / 0
Многопоточность. Насколько вычисления в 30 потоках дороже вычислений в 4?
    #37641726
ALKIR
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Системы завоза тонн плова,

Параллельное выполнение нескольких потоков затратит не только ресурсы на переключение между потоками, но и ресурсы необходимые для одновременного существования нескольких потоков. Допустим, есть задача для решения которой необходимо выделить 1Мб памяти. Если подряд запустить эту задачу 100 раз, то потребуется всего 1Мб памяти. А если организовать 100 потоков, то потребуется уже 100+Мб памяти. Очевидно, что в первом и втором случае по разному будут задействованы всевозможные кэши, вероятно, что во втором случае в изобилии будут кэш промахи... и т.д.

Совет: соберите пару примеров "на коленке" и проверьте (всего с десяток строк кода)...
...
Рейтинг: 0 / 0
Многопоточность. Насколько вычисления в 30 потоках дороже вычислений в 4?
    #37641783
Системы завоза тонн плова
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
ALKIRСистемы завоза тонн плова,

Параллельное выполнение нескольких потоков затратит не только ресурсы на переключение между потоками, но и ресурсы необходимые для одновременного существования нескольких потоков. Допустим, есть задача для решения которой необходимо выделить 1Мб памяти. Если подряд запустить эту задачу 100 раз, то потребуется всего 1Мб памяти. А если организовать 100 потоков, то потребуется уже 100+Мб памяти. Очевидно, что в первом и втором случае по разному будут задействованы всевозможные кэши, вероятно, что во втором случае в изобилии будут кэш промахи... и т.д.

Совет: соберите пару примеров "на коленке" и проверьте (всего с десяток строк кода)...
Понято. Спасибо.
...
Рейтинг: 0 / 0
4 сообщений из 4, страница 1 из 1
Форумы / Программирование [игнор отключен] [закрыт для гостей] / Многопоточность. Насколько вычисления в 30 потоках дороже вычислений в 4?
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


Просмотр
0 / 0
Close
Debug Console [Select Text]