Пользовательский поток

В качестве пользовательского потока (также написанного пользовательского потока ) иногда User Level -Thread и z. B. под Windows , световод ( см ниже ) называется, в компьютерной науке определенным способом запуска программ или программные части в взаимосвязанном образе. Функциональность реализована не непосредственно в ядре (как в случае с потоком ядра ), а в отдельной программной библиотеке , расположенной в пользовательском пространстве . Это позволяет изменять контекст (переключение задач) между пользовательскими потоками без сложных системных вызовов, а это означает, что изменение контекста происходит значительно быстрее, чем между потоками или процессами ядра .

Планирование

Поскольку пользовательские потоки в потоке ядра в принципе не выполняются одновременно ([псевдо] параллельно), а только один за другим, пользовательские потоки не могут быть разумно распределены по нескольким процессорам . Поскольку операционная система ничего не знает о существовании пользовательских потоков, планирование (управление временем) пользовательских потоков должно выполняться самой программой или используемой программной библиотекой . Таким образом, кооперативное планирование практически всегда работает, а не с упреждением (от англ. Preemptive , «привилегированный»). Поэтому пользовательские потоки должны отказаться от управления по собственному желанию.

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

Другая точка зрения

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

Реализации

Библиотеки пользовательских потоков доступны во многих операционных системах, но интерпретаторы также могут поддерживать пользовательские потоки. Имена пользовательских потоков различаются в зависимости от реализации .

Windows

Microsoft вызывает предлагаемые ею пользовательские потоки (начиная с Windows 98 ) в Windows Fibers . Английское слово волокно ( . Дт « Fiber » → « волокна ») может быть использовано здесь в качестве ссылки на естественное отношение к теме - д. ЧАС. нить - следует понимать как волокна / волокна: Волокно / волокна тоньше и проще , чем нити (нити); нить можно сплести из нескольких отдельных волокон. Нить можно преобразовать в волокно под Windows и наоборот.

Linux

В Linux, например, библиотеки LinuxThreads и GNU Portable Threads предоставляют пользовательские потоки . Однако LinuxThreads больше не разрабатывается, и его преемник, собственная библиотека потоков POSIX (NPTL), больше не является чистой библиотекой пользовательского пространства.

Солярис

Соглашение об именах в Solaris отличается от такового в Windows и Linux . Поток ядра здесь как облегченный процесс ( англ .; → см. «Облегченный процесс». Поток (информатика) ), о котором идет речь, а пользовательский поток - просто вызываемый поток .
Поток Solaris также может быть связан с другими облегченными процессами в том же процессе .

Виртуальная машина Java

Более новые версии виртуальной машины Java (JVM) используют, если они доступны, возможности локальной операционной системы, чтобы сделать потоки доступными для программиста. В более старых версиях или если операционная система не поддерживает потоки ядра , JVM также имеет свои собственные функции пользовательского потока. Это называется зеленой нитью . Зеленые потоки - это настоящие пользовательские потоки, но они по-прежнему предлагают упреждающее планирование на основе приоритетов , которое реализуется JVM.

литература

Индивидуальные доказательства

  1. Cprogramming.com: Введение в программирование Windows и OpenGL. (Английский)
  2. Викрам Шукла: Сравнение моделей потоковой передачи Linux: LinuxThreads и NPTL (PDF; 50 КБ, английский), по состоянию на 31 мая 2019 г.
  3. ^ Фабиан Забатта, Кевин Ин: Сравнение производительности потоков: Windows NT и Solaris на симметричном мультипроцессоре. 2-й симпозиум USENIX по Windows NT, 3-5 августа 1998 г. В: usenix.org. USENIX ассоциации, 10 апреля 2002, доступ к 6 февраля 2014 .
  4. ^ Гленн Л. Вандербург и др.: Уловки гуру программирования Java. Архивировано из оригинала на 25 мая 2009 года ; по состоянию на 14 апреля 2018 г. (на английском языке).

веб ссылки