|
|
|
Многопоточность. Насколько вычисления в 30 потоках дороже вычислений в 4?
|
|||
|---|---|---|---|
|
#18+
Если на машине всего 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 в секунду. Неужели это дорого? Может быть смысл этого выражения в том, что сбивается кеш или конвееры ЦП? Кто в курсе? :) ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 31.01.2012, 21:13 |
|
||
|
Многопоточность. Насколько вычисления в 30 потоках дороже вычислений в 4?
|
|||
|---|---|---|---|
|
#18+
Системы завоза тонн плова, зависит от операционной системы. если программа сетевая - то удобно юзать зеленые треды. там накладные расходы слабые. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 01.02.2012, 01:56 |
|
||
|
Многопоточность. Насколько вычисления в 30 потоках дороже вычислений в 4?
|
|||
|---|---|---|---|
|
#18+
Системы завоза тонн плова, Параллельное выполнение нескольких потоков затратит не только ресурсы на переключение между потоками, но и ресурсы необходимые для одновременного существования нескольких потоков. Допустим, есть задача для решения которой необходимо выделить 1Мб памяти. Если подряд запустить эту задачу 100 раз, то потребуется всего 1Мб памяти. А если организовать 100 потоков, то потребуется уже 100+Мб памяти. Очевидно, что в первом и втором случае по разному будут задействованы всевозможные кэши, вероятно, что во втором случае в изобилии будут кэш промахи... и т.д. Совет: соберите пару примеров "на коленке" и проверьте (всего с десяток строк кода)... ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 01.02.2012, 13:15 |
|
||
|
Многопоточность. Насколько вычисления в 30 потоках дороже вычислений в 4?
|
|||
|---|---|---|---|
|
#18+
ALKIRСистемы завоза тонн плова, Параллельное выполнение нескольких потоков затратит не только ресурсы на переключение между потоками, но и ресурсы необходимые для одновременного существования нескольких потоков. Допустим, есть задача для решения которой необходимо выделить 1Мб памяти. Если подряд запустить эту задачу 100 раз, то потребуется всего 1Мб памяти. А если организовать 100 потоков, то потребуется уже 100+Мб памяти. Очевидно, что в первом и втором случае по разному будут задействованы всевозможные кэши, вероятно, что во втором случае в изобилии будут кэш промахи... и т.д. Совет: соберите пару примеров "на коленке" и проверьте (всего с десяток строк кода)... Понято. Спасибо. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 01.02.2012, 13:32 |
|
||
|
|

start [/forum/topic.php?fid=16&msg=37640763&tid=1342474]: |
0ms |
get settings: |
13ms |
get forum list: |
15ms |
check forum access: |
4ms |
check topic access: |
4ms |
track hit: |
52ms |
get topic data: |
9ms |
get forum data: |
3ms |
get page messages: |
56ms |
get tp. blocked users: |
2ms |
| others: | 258ms |
| total: | 416ms |

| 0 / 0 |
