Мне было интересно, когда .Net, скорее всего, переключится с потока на другой? Насколько я понимаю, мы не можем предсказать, когда это произойдет именно так, но разве в этом есть интеллект? Например, когда поток выполняется, он попытается дождаться возврата метода или завершения цикла до переключения?C# Когда произойдет переключение потоков?
ответ
Я не эксперт в .NET, но в общем планировании обрабатывается ядром.
Либо квант времени вашего потока истек (нити/процессы только получить определенное количество времени CPU)
Ваш поток заблокировал для IO.
Некоторые другие неясные причины, такие как ожидание сообщения IPC, сетевой пакет или что-то в этом роде.
Нити могут быть выгружены в любой точке вдоль пути выполнения, будь то в цикле или возврате из функции. Это вообще не обрабатывается базовой виртуальной машиной (.NET или JVM), но контролируется ОС.
Я забыл упомянуть, конечно, виртуальная машина может вызвать YIELD() (или что-то еще) для ручной перепланирования, но на самом деле нет причин для этого. – zhiayang
Конечно, есть «интеллект», своего рода :). Набор рабочих потоков может изменяться только при прерывании:
Фактическое аппаратное прерывание от периферийного устройства, например. диск, сетевой адаптер, КБ, мышь, таймер.
Программное прерывание (т.е. системный вызов), который может изменять состояние потока/s. Это включает вызовы сна и вызовы для ожидания/сигнала на межпоточных синхронизирующих объектах, а также вызовы ввода-вывода, которые запрашивают данные, которые не доступны сразу.
Если нет прерывания, ОС не может изменить набор работающих потоков, потому что он не введен. ОС не знает или не заботится о циклах, вызовах функций/методов (кроме тех, которые делают системные вызовы, как указано выше), gotos или любых других механизмов управления потоком пользовательского уровня.
Я прочитал ваш вопрос сейчас, это не может быть rellevant больше, но после прочтения выше ответов, я хочу просто, чтобы убедиться:
Нить управляется (или, как я знаю) по к которому они принадлежат. Нет ничего общего с операционной системой (и это основная причина, по которой работа с многопоточными файлами происходит быстрее, чем работа с многопроцессорными процессами, поскольку обмен данными между потоками и переключение между ними происходит быстрее, чем контекстный переключатель, который возникает между процесс с помощью Краткосрочного планировщика). (ПРИМЕЧАНИЕ: существуют потоки потоков USER_MODE и потоки KERNEL_MODE: каждый из них может иметь оба из них или только из них. В любом случае поток, работающий в среде пользовательского приложения, рассматривается как поток USER_MODE и управляется процессом, к которому он принадлежит.)
Я пишу? Спасибо !!!
- 1. Как C# обрабатывает переключение потоков?
- 2. Переключение потоков Java
- 3. Как переключение потоков потоков на многоядерный процессор?
- 4. Как сетевое соединение выдержит переключение потоков?
- 5. Переключение контекстов потоков с SIGALRM
- 6. Когда происходит переключение процесса
- 7. Повлиять на переключение потоков() с точками останова
- 8. Когда это произойдет?
- 9. Когда произойдет переполнение System.currentTimeMillis()?
- 10. Когда произойдет «OnReconnected»?
- 11. Переключение потоков для очистки приложений MFC
- 12. Переключение между потоками в C#
- 13. Переключение контекстов потоков пользовательского уровня: как определить, когда поток блокируется в C?
- 14. Как python обрабатывает блокировку потоков/переключение контекста?
- 15. Как заставить CLR отображать переключение потоков ОС?
- 16. Пулы потоков и контекстное переключение (задачи)?
- 17. одна сеть двух веб-серверов IIS? произойдет ли переключение?
- 18. Когда использовать пул потоков в C#?
- 19. Когда произойдет EOFException в потоках JAVA
- 20. Сигнал: когда произойдет такая ситуация?
- 21. Когда произойдет сбой даты java?
- 22. Когда это произойдет в PHP?
- 23. Когда произойдет таймаут сокета? (Unix)
- 24. Когда произойдет тайм-аут сеанса?
- 25. Что произойдет, когда обнаружен тупик
- 26. остановить потоки, когда произойдет исключение
- 27. Когда произойдет останов OAuth 2.0?
- 28. Переключение контекста, когда поток вызывает системный вызов
- 29. Что произойдет, если переменная volatile будет записана из 2 потоков?
- 30. Когда произойдет переключение контекста, будет ли поток оставаться на том же самом номере?
В отсутствие системных вызовов или других прерываний вы можете ожидать, что поток будет переключен планировщиком ОС. Это происходит порядка десятков миллисекунд. –