Соотношение слов :: «Нить» и «Ядро» - PullRequest
2 голосов
/ 22 августа 2011

Имеет ли число потоков, созданных / способных программой, какое-либо отношение / ограничение с числом или ядром, которое имеет ЦП?Имеет ли слово thread какое-либо отношение к Cores of CPU вообще?

Ответы [ 3 ]

5 голосов
/ 22 августа 2011

Компьютер может запускать потоки number_of_cores только параллельно.Если система имеет только одно ядро, одновременно запускается только один поток.Многозадачность «симулируется» только при последовательном запуске каждого потока в течение очень коротких периодов времени.

Обычно ОС произвольно распределяет потоки по ядрам.Например, один квант потока может быть запущен на одном ядре, а следующий квант того же потока может быть запущен на другом ядре.Вот почему вы видите, что оба ядра заняты, когда вы запускаете один процессорный поток.Это позволяет однопоточным процессам использовать преимущества многоядерных систем, распределяя нагрузку между несколькими ядрами, в зависимости от различной доступности.

Более того, операционные системы позволяют «заблокировать» поток на одном или нескольких ядрах, поэтомуон работает только на указанных ядрах.Это называется маска сходства в Windows.Современное многоядерное программное обеспечение может воспользоваться этим и выделить определенные потоки для определенных ядер, чтобы оптимизировать свою рабочую нагрузку.Игры делают это для выделения ИИ для одного ядра, для рендеринга, например, для другого.Для того, чтобы сделать это эффективно, программное обеспечение должно знать, сколько ядер имеет система, а также создавать и назначать потоки на основе этого числа.

Аналогично, структуры параллельного программирования, такие как OpenMP, подсчитывают ядра для эффективного распараллеливания операций.Они создают столько потоков, сколько число ядер в системе, чтобы получить оптимальную производительность для физического параллелизма.

Я думаю, что это единственный случай соотношения между количеством ядер и числом потоков.

2 голосов
/ 22 августа 2011

Количество ядер на машине - это количество независимых процессорных блоков, которые могут работать одновременно.

Количество потоков , которыепрограмма может порождать - это количество логических единиц выполнения, которые программа хотела бы выполнять параллельно друг с другом.

Как правило, число потоков, которые программа может порождать, ограничено временем выполнения языка и операционнойРеализация внутренней потоковой системы.Однако, если вы создаете больше потоков, чем имеется ядер на машине, не все эти потоки могут работать параллельно друг с другом.Вместо этого потоки будут запланированы каким-то образом, чтобы максимизировать количество времени, в течение которого работает каждый поток.Хорошо иметь больше потоков, чем ядер, но вы не обязательно сильно ускоритесь, введя новые потоки, если все ядра будут запущены одновременно.

Во многих случаях программа будет иметьмного сотен потоков, только небольшое количество которых будет запущено в любое время.Другие потоки могут находиться в спящем режиме и ожидать появления какого-либо события (пользовательский ввод, таймер, событие сети или диска и т. Д.).Это не проблема;поскольку эти потоки ничего не делают активно, машине не нужно выделять для них какие-либо ядра, и они могут тратить свою вычислительную мощность на работу с другими потоками.

1 голос
/ 22 августа 2011

Каждое ядро ​​может выполнять один поток. Если у вас есть X-ядра, тогда X-потоки могут выполняться одновременно. Если у вас X ядер и X + n потоков, то максимум X потоков будут выполняться одновременно. Однако все потоки будут выполняться, так как ядро ​​операционной системы разделит ядра между всеми потоками.

...