Пользовательский уровень потока включает в себя N потоков пользовательского уровня, которые работают на одном потоке ядра. Каковы детали потоковой обработки пользовательского уровня и как это отличается от сопрограмм?В чем разница между потоками пользовательского уровня и сопрограммами?
ответ
Википедия имеет довольно подробное резюме по теме: Thread (computing).
С Green threads есть инструкция по выполнению виртуальной машины, которая обычно решает между переключением потоков между двумя инструкциями.
С сопрограммами две функции дают друг другу в определенных точках, возможно, передавая значения вдоль и обычно требуют специальной поддержки языка. Например. производителя, уступающего потребителю, проходящего по предмету.
Идея потоков пользовательского уровня состоит в том, чтобы иметь несколько разных логических потоков, работающих в одной и той же программе, но чтобы пользовательская программа обрабатывала отображение из логических потоков в потоки ядра (которые фактически получают запланированные), а не имеет дескриптор ОС все отображение. Это может повысить производительность, позволяя диспетчеру обработать программу пользователя. Понятно, что пользовательские потоки представляют собой одну реализацию упреждающей многозадачности, где несколько заданий запускаются параллельно, когда потоки периодически останавливаются, а другие потоки выполняются.
Coroutines, с другой стороны, являются обобщением вызова и возврата стандартных функций («подпрограмм»), где функции передают управление назад и вперед друг к другу, передавая значения при их переключении между подпрограммами. Переключение назад и вперед между сопрограммами находится под контролем самих сопрограмм; управление только переходит из одной сопрограммы в другую, если одна из сопрограмм явно дает значение другому. Это пример совместной многозадачности, где несколько заданий выполняются параллельно, если отдельные шаги в задаче вручную координируются, кто запускается и когда.
Надеюсь, это поможет!
- 1. В чем разница между асимметричными и симметричными сопрограммами?
- 2. Разница между несинхронизированными потоками и синхронизированными потоками
- 3. Разница между потоками SwingUtilities и потоками AWT.EventQueue
- 4. В чем разница между потоками и дейтаграммами в сетевом программировании?
- 5. В чем разница между потоками и коллекциями в Java 8
- 6. В чем разница между асинхронными методами и потоками?
- 7. В чем разница между потоками Oracle и сменой данных?
- 8. В чем разница между реактивными и реактивными потоками?
- 9. Разница между рабочими потоками и сагами
- 10. В чем разница между уровнем прикладного уровня и бизнес-логики?
- 11. В чем разница между простым потребителем и потребителем высокого уровня?
- 12. Разница между операциями и потоками в Cocoa
- 13. В чем разница между Boost.MPI и Boost.Interprocess?
- 14. В чем разница между тестированием уровня UI и тестированием уровня API?
- 15. В чем разница между потоками (и процессом) в режиме ядра и в режиме пользователя?
- 16. Есть ли превенция с потоками пользовательского уровня
- 17. В чем разница между дизайнером пользовательского интерфейса и информационным архитектором?
- 18. В чем разница между UI gamObject и компонентом пользовательского интерфейса?
- 19. В чем разница между потоком пользовательского интерфейса и потоком Render?
- 20. В чем разница между написанием пользовательского метода и настраиваемых фильтров?
- 21. В чем разница между потоком диспетчера и потоком пользовательского интерфейса
- 22. В чем разница между Widget и UIObject
- 23. В чем разница между «и»?
- 24. В чем разница между `{}` и `[]`?
- 25. В чем разница между == и ===?
- 26. В чем разница между «+» и «\ +»?
- 27. В чем разница между + = и = +?
- 28. В чем разница между/* ... */и/** ... */
- 29. В чем разница между: и +:
- 30. В чем разница между $ {} и # {}
Как вы описываете сопрограммы, относящиеся к другим сопрограммам, как это отличается от того, как возникают потоки пользовательского уровня? – user782220
@ user782220- Coroutines продолжают выполняться до тех пор, пока они явно не выполнит оператор yield, чтобы передать управление другой сопрограмме. Когда они уступают, они обычно сообщают значение для сопрограммы, к которой они уступают, и они явно указывают, какой корутин должен выполнить следующий. Темы могут быть приостановлены в любое время и без уведомления, не сообщают значения при уступке и не будут явно контролировать, какой поток выполняет следующий. – templatetypedef
Есть кое-что, что мне не хватает. Потоки пользовательского уровня поддерживаются одним потоком ядра, а сопрограммы также поддерживаются одним потоком ядра. Когда поток ядра резервного копирования в любое время приостанавливается для потоков пользовательского уровня, как это ничем не отличается от поддержки ядра ядра в сопрограммах. – user782220