Nano Hash - криптовалюты, майнинг, программирование

Тяжелая и легкая нить

Что такое легкие и тяжелые потоки с точки зрения Java?

10.02.2010

  • @TFD - ОП задал всего 4 вопроса, есть много времени, чтобы принять ответ. 10.02.2010

Ответы:


1

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

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

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

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

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

10.02.2010

2

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

01.01.2012

3

В большинстве систем облегченные потоки — это обычные потоки, которые вы создаете с помощью библиотеки, например p_threads в Linux.

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

Чтобы получить больше информации:

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

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

10.02.2010
Новые материалы

Кластеризация: более глубокий взгляд
Кластеризация — это метод обучения без учителя, в котором мы пытаемся найти группы в наборе данных на основе некоторых известных или неизвестных свойств, которые могут существовать. Независимо от..

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

Частный метод Python: улучшение инкапсуляции и безопасности
Введение Python — универсальный и мощный язык программирования, известный своей простотой и удобством использования. Одной из ключевых особенностей, отличающих Python от других языков, является..

Как я автоматизирую тестирование с помощью Jest
Шутка для победы, когда дело касается автоматизации тестирования Одной очень важной частью разработки программного обеспечения является автоматизация тестирования, поскольку она создает..

Работа с векторными символическими архитектурами, часть 4 (искусственный интеллект)
Hyperseed: неконтролируемое обучение с векторными символическими архитектурами (arXiv) Автор: Евгений Осипов , Сачин Кахавала , Диланта Хапутантри , Тимал Кемпития , Дасвин Де Сильва ,..

Понимание расстояния Вассерштейна: мощная метрика в машинном обучении
В обширной области машинного обучения часто возникает необходимость сравнивать и измерять различия между распределениями вероятностей. Традиционные метрики расстояния, такие как евклидово..

Обеспечение масштабируемости LLM: облачный анализ с помощью AWS Fargate и Copilot
В динамичной области искусственного интеллекта все большее распространение получают модели больших языков (LLM). Они жизненно важны для различных приложений, таких как интеллектуальные..