Почему потоки ОС считаются дорогими?

Существует множество решений, направленных на реализацию потоков «в пользовательском пространстве». Будь то golang.org goroutines, зеленые потоки python, асинхронность C#, процессы erlang и т. д. Идея состоит в том, чтобы разрешить параллельное программирование даже с одним или ограниченным числом потоков.

Чего я не понимаю, так это почему потоки ОС такие дорогие? На мой взгляд, в любом случае вам нужно сохранить стек задачи (поток ОС или поток пользователя), который составляет несколько десятков килобайт, и вам нужен планировщик для перемещения между двумя задачами.

ОС предоставляет обе эти функции бесплатно. Почему потоки ОС должны быть дороже, чем «зеленые» потоки? В чем причина предполагаемого снижения производительности из-за наличия выделенного потока ОС для каждой «задачи»?

27
задан Chi-Lan 1 April 2012 в 13:53
поделиться