Почему модель многопоточности не используется в более - PullRequest
0 голосов
/ 20 апреля 2020

В книге Operating System Concepts рассказывается о различных многопоточных модулях (раздел 4.3), упоминается, что модель «один к одному» используется в большинстве операционных систем; Linux, Windows и др. c. Тем не менее, в нем говорится о модели «многие ко многим» и о том, что она устраняет некоторые проблемы, наблюдаемые в модели «один-к-одному», но позднее упоминается, что единственная широко используемая реализация - двухуровневая. модель, которая является просто расширением модели «многие ко многим», которая использовалась в более старой версии Solaris (9), но теперь больше не используется и была заменена моделью «один на один». Мой вопрос: если модель «многие ко многим» лучше, то почему она не используется чаще? Это из-за сложности? Я могу представить, что могут быть проблемы с переключением контекста, если не было какого-то «липкого» отображения между пользовательскими потоками и потоками уровня ядра?

Спасибо за любую помощь в этом.

1 Ответ

1 голос
/ 21 апреля 2020

используется; go подпрограммы в Go - это именно то, что управляется средой выполнения Go. Поскольку память ядра стала дешевле (потому что память стала дешевле), а использование pthreads стало повсеместным, затраты времени на управление двухуровневой модели и затраты времени на ее поддержку привели к ее упадку.

Go подпрограммы это модель программирования, и она должна быть чрезвычайно дешевой, до такой степени, что Go программам не должно быть стыдно иметь их тысячи. Среда выполнения Go очень тщательно хранит пул виртуальных процессоров (созданный с использованием реальных потоков), который может очень быстро принять процедуру go.

...