Понятие "нить"

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

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

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

Рис. 3.9.  а) Три процесса с одной нитью каждый
б) Один процесс с тремя нитями

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

Разные средства организации вычислительного процесса с использованием нитей

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

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

 

Возможно стоит прочитать: