Введение
Средства достижения многозадачности в компьютерных системах
легковесные процессы в Erlang
В компьютерных операционных системах, легковесный процесс (LWP) является средством реализации многозадачности. В традиционном понимании этого термина, как это используется в Unix System V и Solaris, LWP выполняется в пользовательском пространстве поверх одной нити ядра и разделяет свое адресное пространство и системные ресурсы с другими LWP в рамках одного и того же процесса. Несколько пользовательских нитей, управляемых библиотекой потоков, могут быть размещены поверх одного или нескольких LWP, что позволяет выполнять многозадачность на уровне пользователя, что может дать определенные преимущества в производительности. В некоторых операционных системах отсутствует отдельный уровень LWP между нитями ядра и пользовательскими нитями. Это означает, что пользовательские нити реализуются непосредственно поверх нитей ядра. В таких случаях термин "легковесный процесс" обычно относится к нитям ядра, а термин "нити" может относиться к пользовательским нитям. В Linux пользовательские нити реализуются путем разрешения определенным процессам совместно использовать ресурсы, что иногда приводит к тому, что эти процессы называют "легковесными процессами". Аналогично, в SunOS версии 4 и выше (до Solaris) "легковесный процесс" относился к пользовательским нитям.
lightweight processes in Erlang
In computer operating systems, a light weight process (LWP) is a means of achieving multitasking. In the traditional meaning of the term, as used in Unix System V and Solaris, a LWP runs in user space on top of a single kernel thread and shares its address space and system resources with other LWPs within the same process. Multiple user level threads, managed by a thread library, can be placed on top of one or many LWPs allowing multitasking to be done at the user level, which can have some performance benefits. In some operating systems, there is no separate LWP layer between kernel threads and user threads. This means that user threads are implemented directly on top of kernel threads. In those contexts, the term "light weight process" typically refers to kernel threads and the term "threads" can refer to user threads. On Linux, user threads are implemented by allowing certain processes to share resources, which sometimes leads to these processes to be called "light weight processes". Similarly, in SunOS version 4 onwards (prior to Solaris) "light weight process" referred to user threads.
Поддерживающие операционные системы
Solaris реализовала отдельный слой LWP начиная с версии 2.2. До версии 9 Solaris поддерживала взаимно-многократное сопоставление между LWP и пользовательскими потоками. Однако от этой схемы отказались из-за сложности её реализации и повышения производительности планировщика ядра. UNIX System V и его современные производные IRIX, SCO OpenServer, HP-UX и IBM AIX допускают взаимно-многократное сопоставление между пользовательскими потоками и LWP. NetBSD 5.0 представила новую, масштабируемую модель потоков "один к одному". Каждый пользовательский поток (pthread) имеет соответствующий ему легковесный процесс (LWP) в ядре. Внутри ядра как процессы, так и потоки реализуются как LWP и обслуживаются планировщиком одинаково.