Потоки и производительность

Программки grepMP и grepMT по собственной структуре и трудности сравнимы вместе, но, как и следовало ждать, программка grepMT характеризуется более высочайшей производительностью, потому что переключение меж потоками осуществляется ядром намного эффективнее, чем переключение меж процессами. В приложении В показано, что эти теоретические ожидания отвечают реальности, и это в особенности Потоки и производительность приметно в тех случаях, когда файлы расположены на разных дисках. Оба варианта реализации способны работать в SMP-системах, значительно улучшая характеристики производительности в определениях общего времени выполнения (истекшего времени); потоки, независимо от того, принадлежат ли они одному и тому же либо различным процессам, параллельно производятся на разных микропроцессорах. Измеренное пользовательское Потоки и производительность время в реальности превосходит общее время выполнения, так как рассчитывается в виде суммарной величины для всех микропроцессоров.

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

Модель "владелец/рабочий" и другие модели многопоточных приложений

Программка grepMT показывает модель многопоточных приложений, носящую заглавие модели "владелец/рабочий" ("boss/worker"), а рис. 6.3, после подмены в нем термина "процесс" на термин "поток", может служить графической иллюстрацией соответственных отношений. Главный поток (основной поток в этом случае) поручает выполнение отдельных задач рабочим Потоки и производительность потокам. Каждый рабочий, поток получает файл, в каком она должна выполнить поиск, а приобретенные рабочим потоком результаты передаются главному сгустку во временном файле.

Есть бессчетные варианты этой модели, одной из которых является модель рабочей группы (work crew model), в какой рабочие потоки объединяют свои усилия для решения одной задачки Потоки и производительность, при этом каждый отдельный поток делает свою маленькую часть работы. Модель рабочей группы употребляется в нашем последующем примере (рис. 7.2). Рабочие группы даже могут без помощи других распределять работу меж собой без получения каких-то указаний со стороны головного потока. В многопоточных программках может быть использована фактически неважно какая Потоки и производительность из схем управления, разработанных для обществ в людском обществе.

Рис. 7.2. Выполнение сортировки слиянием с внедрением нескольких потоков

2-мя другими основными моделями являются модель "клиент/сервер" (client/server) (проиллюстрирована на рис. 7.1, а пример ее практической реализации рассматривается в главе 11) и конвейерная модель (pipeline model), в какой выполнение задания передается от Потоки и производительность 1-го потока к другому (пример многоступенчатого сборочного потока рассматривается в главе 10 и иллюстрируется на рис. 10.1).

При проектировании многопоточных систем эти модели владеют целым рядом преимуществ, к числу которых можно отнести последующие:

• Большая часть заморочек многопоточного программирования могут быть разрешены с внедрением одной из стандартных моделей, облегчающих проектирование, разработку и отладку программ Потоки и производительность.

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

• Эти модели естественным образом соответствуют структуре большинства обыденных задач программирования.

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

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

• Многие всераспространенные недостатки программ, к примеру, нарушение критерий состязаний задач и их блокирование Потоки и производительность, также можно обрисовать с внедрением обычных моделей, к числу которых относятся действенные способы использования объектов синхронизации, описанные в главах 9 и 10.

Эти традиционные модели потоков реализованы в почти всех ОС. В модели компонентных объектов (Component Object Model, COM), обширно применяемой в почти всех Windows-системах, применяется другая терминология Потоки и производительность, и хотя рассмотрение модели СОМ выходит за рамки данной книжки, об этих моделях говорится в конце главы 11, где они сравниваются с другими примерами программ.

Пример: применение принципа "дели и владычествуй" для решения задачки сортировки слиянием в SMP-системах

Этот пример показывает способности значимого увеличения производительности за счет использования потоков, в особенности в случае Потоки и производительность SMP-систем. Основная мысль заключается в разбиении задачки на более маленькие составляющие, рассредотачивании выполнения подзадач меж отдельными потоками и следующем объединении результатов для получения окончательного решения. Планировщик Windows автоматом назначит потокам отдельные микропроцессоры, в итоге чего задачки будут производиться параллельно, снижая общее время выполнения приложения.

Эта стратегия Потоки и производительность, которую нередко именуют стратегией "дели и владычествуй" (divide and conquer), либо моделью рабочей группы (work crew model), оказалась очень полезной и в качестве средства увеличения производительности, и в качестве способа проектирования алгоритмов. Одним из примеров ее внедрения служит программка grepMT (программка 7.1), в какой для каждой файловой операции ввода/вывода Потоки и производительность и для поиска шаблона создается отдельный поток. Как показано в приложении B, в случае SMP-систем производительность увеличивается, так как планировщик может распределять выполнение потоков меж разными микропроцессорами.

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

Решение задачки Потоки и производительность сортировки слиянием (merge-sort), в какой сортируемый массив разбивается на несколько массивов наименьшего размера, является традиционным примером метода, построенного на принципе "дели и владычествуй". Любой из массивов маленького размера сортируется по отдельности, после этого отсортированные массивы попарно соединяются воединыжды с образованием отсортированных массивов большего размера. Описанное слияние массивов попарно Потоки и производительность осуществляется прямо до окончания всего процесса сортировки. В общем случае, сортировка слиянием начинается с массивов размерности 1, которые сами по для себя не нуждаются в сортировке. В данном примере сортировка начинается с массивов большей размерности, чтоб на каждый микропроцессор приходилось по одному массиву. Блок-схема применяемого метода показана на рис Потоки и производительность. 7.2.

Детали реализации представлены в программке 7.2. Число задач задается юзером в командной строке. Временные характеристики сортировки приведены в приложении В. В упражнении 7.9 вам предлагается поменять программку sortMT таким макаром, чтоб она поначалу определяла количество доступных микропроцессоров, используя для этого функцию GetSystemInfo, а потом создавала по одному сгустку для каждого Потоки и производительность микропроцессора.

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

Примечание

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


potrebnosti-i-sposobnosti-cheloveka.html
potrebnosti-kak-predposilka-proizvodstva-klassifikaciya-i-osnovnie-harakteristiki-zakon-vozvisheniya-potrebnostej-ekonomicheskie-interesi.html
potrebnosti-pacienta-v-podderzhanii-normalnoj-temperaturi-tela.html