Задать вопрос
@daniil14056

Что такое Потоки на уровне ОС? В 1-ядерном процессоре же всего 1 поток?

Потоки являются эмуляцией ОС. Насколько я понимаю процессор о них не знает.
Пара Вопросов про потоки.
Как они используют Кеш? Они же мешают друг другу.
Есть ли реализации Эмуляции потоков или асинхронности на гитхабе? Может там код Unix? Но как там искать и где не знаю.
Почему с помощью распарализации потоков можно получить выигрыш в скорости вычислений? Это же каждый поток будет постоянно грузить в регистры свои снимки, сохранять, загружать. Промахов по кешу будет больше.
Сколько инструкций за раз выполняется 1, 10, 100? До прерывания? От чего зависит.

И К примеру выполняется такие команды, как пример инструкция чтения строки из stdin, почему вся ос не глохнет. Типа что в этот момент ожидания времени происходит, Или что ОС все 1000 потоков переключает там каждую 0.0001 секунды?
И этот вопрос решается с помощью асинхроности и калбека. Тогда почему вообще вся ОС не асинхронная в одном потоке как Node JS?
  • Вопрос задан
  • 487 просмотров
Подписаться 3 Средний 4 комментария
Пригласить эксперта
Ответы на вопрос 5
gbg
@gbg
Любые ответы на любые вопросы
Потоки переключаются с квантом около 28 миллисекунд или около того.

Да, если навертеть много потоков, кэш будет вымываться. А вы думали, в сказку попали? Хорошие HPC программы не запускают тредов больше чем ядер.

Почему с помощью распарализации потоков можно получить выигрыш в скорости вычислений?

Потому что надо аккуратно программировать, не допускать переключения контекстов (не дергать ядро почем зря, а то с некоторых станется) и не запускать тредов больше, чем в системе есть ядер.

Тогда почему вообще вся ОС не асинхронная в одном потоке как Node JS?

Поздравляю вас с изобретением Windows 3.1. Вы наверное не застали, но эта ОС наглухо зависала вместе с приложением, если оно зависало.
Ответ написан
saboteur_kiev
@saboteur_kiev
software engineer
В многозадачной системе каждый процесс имеет кучу всего - свою область памяти, своего родителя, права доступа, открытые файловые дескрипторы и так далее. Переключение с процесса на процесс - довольно тяжелая задача.

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

Сколько инструкций за раз выполняется 1, 10, 100? До прерывания? От чего зависит.

Зависит от ядра операционки, а точнее от реализации process scheduler. Обычно все завязано на прерывании по таймеру, поэтому выделяются слайсы процессорного времени - а значит у процессора с бОльшей тактовой частотой будет выполнено больше инструкций за слайс. А дальше - process scheduler может быть довольно умным, выделяя конкретному процессу/потоку несколько слайсов подряд, если считает что так будет лучше.
Но слишком сложной логики у process scheduler быть не может, иначе само переключение будет слишком дорогим.
Ответ написан
jcmvbkbc
@jcmvbkbc
"I'm here to consult you" © Dogbert
И К примеру выполняется такие команды, как пример инструкция чтения строки из stdin, почему вся ос не глохнет. Типа что в этот момент ожидания времени происходит, Или что ОС все 1000 потоков переключает там каждую 0.0001 секунды?

Только готовые к выполнению потоки получают процессорное время. Потоки могут останавливаться в ожидании какого-либо примитива синхронизации, например семафора или мьютекса. Такие потоки не занимают процессор.
Поток читающий из stdin может останавливаться, например, на семафоре, защищающем очередь данных stdin когда она пуста. Какой-то другой поток должен поместить новые данные в очередь stdin и открыть этот семафор, переведя ожидающий поток в состояние готовности к выполнению.
Ответ написан
Комментировать
uvelichitel
@uvelichitel
habrahabr.ru/users/uvelichitel
В многоядерном процессоре и в системе с двумя или четырьмя камнями поток исполнения команд будет один или вы потеряете контроль.
Ответ написан
@12rbah
Есть ли реализации Эмуляции потоков или асинхронности на гитхабе? Может там код Unix? Но как там искать и где не знаю.

Ну можете исходники посмотреть какого нибудь ЯП, я видел статью на хабре, про то как парень пишет свой ЯП, говорит что есть поддержка многопоточности (сам не чекал, но мб то, что вам будет нужно)
статья
Ответ написан
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Похожие вопросы