2013-11-24 3 views
2

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

ответ

1

Википедия имеет довольно подробное резюме по теме: Thread (computing).

С Green threads есть инструкция по выполнению виртуальной машины, которая обычно решает между переключением потоков между двумя инструкциями.

С сопрограммами две функции дают друг другу в определенных точках, возможно, передавая значения вдоль и обычно требуют специальной поддержки языка. Например. производителя, уступающего потребителю, проходящего по предмету.

0

Идея потоков пользовательского уровня состоит в том, чтобы иметь несколько разных логических потоков, работающих в одной и той же программе, но чтобы пользовательская программа обрабатывала отображение из логических потоков в потоки ядра (которые фактически получают запланированные), а не имеет дескриптор ОС все отображение. Это может повысить производительность, позволяя диспетчеру обработать программу пользователя. Понятно, что пользовательские потоки представляют собой одну реализацию упреждающей многозадачности, где несколько заданий запускаются параллельно, когда потоки периодически останавливаются, а другие потоки выполняются.

Coroutines, с другой стороны, являются обобщением вызова и возврата стандартных функций («подпрограмм»), где функции передают управление назад и вперед друг к другу, передавая значения при их переключении между подпрограммами. Переключение назад и вперед между сопрограммами находится под контролем самих сопрограмм; управление только переходит из одной сопрограммы в другую, если одна из сопрограмм явно дает значение другому. Это пример совместной многозадачности, где несколько заданий выполняются параллельно, если отдельные шаги в задаче вручную координируются, кто запускается и когда.

Надеюсь, это поможет!

+0

Как вы описываете сопрограммы, относящиеся к другим сопрограммам, как это отличается от того, как возникают потоки пользовательского уровня? – user782220

+0

@ user782220- Coroutines продолжают выполняться до тех пор, пока они явно не выполнит оператор yield, чтобы передать управление другой сопрограмме. Когда они уступают, они обычно сообщают значение для сопрограммы, к которой они уступают, и они явно указывают, какой корутин должен выполнить следующий. Темы могут быть приостановлены в любое время и без уведомления, не сообщают значения при уступке и не будут явно контролировать, какой поток выполняет следующий. – templatetypedef

+0

Есть кое-что, что мне не хватает. Потоки пользовательского уровня поддерживаются одним потоком ядра, а сопрограммы также поддерживаются одним потоком ядра. Когда поток ядра резервного копирования в любое время приостанавливается для потоков пользовательского уровня, как это ничем не отличается от поддержки ядра ядра в сопрограммах. – user782220

Смежные вопросы