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

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

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

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

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

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

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

 

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