Работает ли поток с одинаковой скоростью (по отношению ко всем остальным задачам процессора)?

Мне интересно, если поток работает с одинаковой скоростью по отношению ко всем другим потокам в компьютере? В конце концов, все они работают на одном и том же процессоре, так что если поток "зависает" - я думаю, это будет означать, что все, что было обработано процессором, отстало в этот момент? Я думаю, что это правильное предположение? Или я не прав?

1 ответ

Прежде всего, есть несколько уровней для размышления: понятие "нить" существует в вашем языке программирования или, может быть, в некоторой "структуре" вашего языка; в операционной системе и даже в оборудовании.

Ключевым моментом является то, что, в конце концов, в реальном оборудовании процессор просто имеет различные элементы своих каналов, регистров,... дублированных. Значение: каждый поток работает на своем собственном оборудовании; и это оборудование (наиболее вероятно) идентично для каждого потока. Следовательно: все потоки должны двигаться с одинаковой скоростью (тактовая частота процессора).

Но, конечно, есть и другие концепции, которые вступают в игру; например приоритет потока. Большинство операционных систем позволяют вам сказать: "этот поток важнее другого потока". А это значит, что более важный поток может получить больше циклов ЦП, чем другие. Но это также зависит от общей нагрузки процессора.

Наконец: вы должны четко понимать терминологию. Нить - это не что иное, как абстракция для некоторой "нити активности". Поток не имеет смысла, пока вы не посчитаете, что он выполняет определенный код. Так что сама нить не "отстает"; но код, который он выполняет, может, например, привести к большому ожиданию (например, при выполнении ввода-вывода). И тогда вы наблюдаете нить "не движется". Но это связано не с "скоростью", с которой работает поток, а с тем, что фактически делает поток!

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


Другие вопросы по тегам