Многие языки программирования, такие как C ++ (библиотека posix) и Java, позволяют воспроизводить потоки пользовательского уровня. Однако, если все эти потоки пользовательского уровня выполняются в одном потоке ядра - у вас только иллюзия мультипрограммирования или многопроцессорности (если доступно несколько процессоров), верно? Я имею в виду - все эти потоки работают в одном и том же потоке ядра. Правильно ли я это сказал? И если да, то как именно мы планируем повысить производительность, используя потоки на уровне пользователя?
РЕДАКТИРОВАТЬ: Я полагаю, что производительность не была бы возможна на модели многие-к-одному (потоки уровня пользователя для сопоставления потоков ядра). Таким образом, в модели «многие ко многим» улучшение производительности возможно только в том случае, если поток уровня ядра отключается. Поэтому мой вопрос заключается в том, что даже если потоки уровня пользователя имеют низкие накладные расходы, я не могу реально представить улучшение производительности, а также планирование потоков уровня ядра.
РЕДАКТИРОВАТЬ 2: По сути, это то, что я пытаюсь проверить - «Предположим, что на компьютере установлено 4 процессора. Теперь, скажем, моя программа работает только один раз, и она разветвляется на 4 потока, каждый из которых выполняет совершенно независимые действия. если сопоставление, скажем, один к одному (сопоставление пользователя с ядром), я действительно могу получить идеальное ускорение в 4 раза. Однако, если, скажем, (по какой-то причине) все 4 пользовательских потока отображаются в одно и то же пространство потоков ядра - тогда ускорения не происходит из-за многопроцессорности. Это потому, что, хотя у меня есть 4 потока уровня пользователя - они работают в одном и том же пространстве ядра и не могут быть разделены на 4 ядра.