2010-02-10 3 views

ответ

1

В большинстве систем Светлые потоки - это обычные потоки, созданные с помощью библиотеки, такие как p_threads в linux.

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

Для получения дополнительной информации:

http://www.computerworld.com/s/article/66405/Processes_and_Threads

http://msdn.microsoft.com/en-us/library/ms684841(VS.85).aspx

25

Это связано с количеством «контекста», связанный с потоком, и, следовательно, количество времени, которое требуется, чтобы выполнить «переключение контекста ».

Тяжелые потоки (как правило, потоки уровня ядра/os) имеют много контекста (аппаратные регистры, стеки ядра и т. Д.). Поэтому для переключения между потоками требуется много времени. Тяжелые потоки могут также иметь ограничения на них, например, на некоторых операционных системах, потоки ядра не могут быть предварительно упущены, а это означает, что они не могут принудительно отключиться до тех пор, пока они не откажутся от контроля.

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

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

[Некоторые операционные системы позволяют нитям разделить адресное пространство, поэтому потоки, которые, как правило, быть достаточно тяжелыми, немного светлее]

4

Java стандартные потоки достаточно тяжелые по сравнению с Erlang нитей, которые очень легкие spawnable процессами. Эрланг демонстрирует распределенный конечный автомат. Однако, например, http://kilim.malhar.net/, библиотека расширений Java, основанная на модели параллелизма Actor, предлагает конструкцию для легковесных потоков в java. Вместо Thread реализует run(), поток Kilim реализует из библиотеки Kilim с помощью метода execute(). По-видимому, это показывает, что время исполнения Java превосходит Erlang (по крайней мере, в локальной среде AFAIK). Java действительно имеет такие вещи в оригинальной спецификации языка, называемой «зелеными потоками», но последующие версии Java отбросили их в пользу родных потоков.

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