Преимущества многонитевых систем хорошо заметны, если такие системы сочетать с многопроцессорными архитектурами. Если каждая нить будет функционировать на отдельном процессоре, то можно говорить о настоящей параллельности работы приложения. Если количество нитей превышает количество имеющихся процессоров, то такие нити должны быть мультиплексирование на эти процессоры1. В идеальном случае, если приложение имеет п нитей, выполняющихся на п процессорах, то одноклетьевая версия той же программы на одно процессорной системе будет тратить на выполнение задачи в п раз больше времени. На практике часть времени занимает создание, управление и синхронизация нитей, однако при использовании многопроцессорной системы эта величина стремится к идеальному соотношению.
Набор одноклетьевых процессов, выполняющихся на одно процессорной машине. Операционная система создает некоторую иллюзию одновременности при помощи выделения каждому процессу некоторого определенного промежутка времени для работы (квантование времени), после чего происходит переключение на следующий процесс. В приведенном
Это означает, что каждый процессор должен использоваться для обработки работающих нитей. Конечно, в один момент времени на одном процессоре может выполняться только одна нить. примере первые три процесса являются задачами серверной части клиент-серверного приложения. Серверная программа при поступлении каждого нового запроса запускает еще один процесс. Все процессы обладают схожими адресными пространствами и совместно используют данные при помощи механизмов межпрограммного взаимодействия. Нижние два процесса созданы другим серверным приложением.
Кстате, рекоммендую приобрести ipad 2, который сочетает в себе удобство и мощность. Каждый сервер представляет собой единый процесс, имеющий несколько нитей, разделяющих между собой единое адресное пространство. Переключение контекста нитей в рамках одного процесса может обрабатываться либо ядром системы, либо на уровне прикладных библиотек, в зависимости от версии ОС. В обоих случаях в приведенном примере видны преимущества использования нитей.
Исключение нескольких схожих адресных пространств приложений, порожденных для параллельной обработки чего-либо, сокращает нагрузку на подсистему памяти (даже при использовании современными системами такого метода разделения памяти, как копирование при записи, необходимо оперировать раздельными картами трансляции адресов для каждого процесса). Так как все нити приложения разделяют одно и то же адресное пространство, они могут использовать эффективные легковесные механизмы межсетевого взаимодействия и синхронизации. Однако существуют и очевидные недостатки применения нитей. Однонитевому процессу не нужно заботиться о защите своих данных от других процессов. Многоножковые процессы должны следить за каждым объектом в собственном адресном пространстве.