В чем трудности многопоточности операционной системы? - PullRequest
1 голос
/ 13 марта 2010

Я читаю книгу, в которой сравниваются два способа реализации потоков: потоки промежуточного программного обеспечения и потоки ОС. Я не знаю, что именно означают эти предложения: «Сложность многопоточности операционной системы, однако, заключается в снижении производительности. Поскольку операционная система участвует в переключении потоков, это связано с системными вызовами. Как правило, они стоят дороже, чем операции с потоками, выполняемые на уровне пользователя, где транзакционное промежуточное программное обеспечение работает ". и какова связь системных вызовов и производительности?

Ответы [ 3 ]

1 голос
/ 14 марта 2010

Книга, вероятно, немного устарела, темы промежуточного программного обеспечения (или волокна) были популярны около 10 лет назад. Да, переключатели контекста относительно дороги, где-то между 2000 и 10000 инструкций процессора. Они требуют перехода ядра и получения глобальной блокировки. Пользовательские потоки могут избежать значительной части этих затрат, нужно только переключить состояние процессора.

Но это не бесплатно:

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

Последняя проблема - большая, порча кеша действительно дорогая. Ядра процессора стали настолько быстрыми по сравнению с памятью, что стоимость очистки кэша становится сопоставимой с переключением контекста ОС. И получить много процессорных ядер - это дешево.

0 голосов
/ 13 марта 2010

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

Некоторые вещи, которые могут сделать системный вызов дорогим (по сравнению с вызовом функции уровня пользователя):

  • сохранение / восстановление состояния процессора
  • обновление среды виртуальной памяти для доступа к пространству ядра
  • после завершения системного вызова может произойти отключение через планировщик ОС
0 голосов
/ 13 марта 2010

Для большинства современных операционных систем. (Windows, * nix, MAC OS), ядро ​​операционной системы находится в защищенном адресном пространстве. А чтобы сохранить целостность этого защищенного пространства, это пространство может быть введено только из пространства пользователя в известных местах. Поэтому вызов в операционную систему несколько дороже, чем обычный вызов функции в пространстве пользователя. http://en.wikipedia.org/wiki/System_call.

Процессор 286 был довольно медленным при переходе из пользовательского пространства в пространство ядра, но более поздние архитектуры ЦП, такие как нынешние x86 и IA64, имеют специальные инструкции, специально предназначенные для максимально быстрого перехода из пользовательского пространства в пространство ядра, и хотя это все еще дороже, чем обычный вызов функции в пространстве пользователя, я не думаю, что оправдывает уровень беспокойства, о котором говорит эта книга.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...