Главная · Карта сайта · Поиск · Статьи · Компьютерные курсы · Обучающие программы · Открытые проекты · Веб-программирование · Создание интернет-сайта · Полезные ссылки · Глоссарий · Контакты · Декабрь 09 2016 22:14:50
Последнее опубликованное

Что такое Model-View-Controller
Pattern Model-View-Controller

Как создать свой веб-сайт
Как создать свой сайт в интернете

Разное
Статистика

Параллельные вычисления


Организация параллельных вычислений с использованием:
Конструкции Parallel.For
Конструкции Parallel.Invoke
Асинхронного вызова делегата
Выделенных потоков (threads)
Диспетчеризации потоков

Открыть все проекты с исходным кодом


[Следующая страница]

6.1. Применение параллельных вычислений

Параллельные вычисления дают много возможностей для оптимизации быстродействия вашего программного продукта, но есть и обратная сторона медали. Параллельные вычисления могут стать источником большого количества ошибок или проявлений некорректного поведения программы, поскольку отладка кода, выполняемого в параллельных потоках намного сложнее отладки последовательно выполняемых инструкций. Значение “намного” иногда соответствует значениям “на порядок”, “в разы” и т.д. С другой стороны, без параллельных вычислений сложно реализовать многие интерактивные сценарии взаимодействия с пользователем, такие как:

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

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

  • В геоинформационных системах (ГИС) очень много времени занимает загрузка и отображение пространственных данных. Часто, обработку наиболее насыщенных и объемных слоев выделяют в отдельный параллельный процесс, а пользователь имеет возможность начать работу с системой сразу же после завершения загрузки “быстро загружаемых” слоев.

Примеры параллельных вычислений можно приводить и дальше. При разработке каждой отдельной программы всегда возникают свои “за” и “против” того, чтобы реализовать ту или иную функциональность в отдельном потоке выполнения. В этой части курса программирования C# Quick Guide™ будут рассмотрены основные инструменты и конструкции программной платформы .NET в целом и языка программирования C# в частности, предназначенные для организации параллельных вычислений. Для того чтобы сделать обучение более наглядным, специально для этого раздела была разработана обучающая программа, демонстрирующая параллельные вычисления посредством графического интерфейса.

Обучающая программа
Демонстрационная программа "Параллельные вычисления на C#".

Дальнейшее повествование будет построено следующим образом: по очереди будут рассмотрены 5 примеров, реализованных в обучающей программе, с приведением фрагментов кода на C# и описанием назначения используемых конструкций и классов. Также, вы сможете скачать “исходники” этой программы и самостоятельно разобраться в ее работе, внося любые изменения в ее код. Для работы с исходным кодом вам понадобится установленная Microsoft Visual Studio 2010. Для запуска собранной версии обучающей программы, вам, возможно, потребуется установить компоненты Microsoft .NET Framework 4.0, которые вы можете скачать по ссылке ниже или найти самостоятельно в интернете.

Скачать обучающую программу.
Скачать исходный код обучающей программы.
Скачать .NET Framework 4.0.

6.2. Процессы и потоки

Перед тем, как начать, буквально пару слов о процессах и потоках. Многозадачные операционные системы позволяют выполнять несколько вычислительных процессов параллельно. Чаще всего, в таком контексте речь идет о псевдопараллельности, поскольку каждый из процессов в соответствии с определенным ему операционной системой приоритетом, в порядке своей очереди получает доступ к общим (разделяемым) вычислительным ресурсам компьютера. Остальные процессы в это время ждут своей очереди. Как организована псевдопараллельная обработка, и как в распределительных вычислительных системах выглядит истинная многозадачность - не предмет этого раздела. Главное сейчас понять, что такое процесс, что такое поток и какая между ними разница. Как я уже сказал, процесс – это создаваемый и контролируемый операционной системой объект, которому выделяется собственное, изолированное от других процессов адресное пространство и приоритет выполнения на уровне операционной системы. Запуск приложения в многозадачной операционной системе, такой как Microsoft Windows – это, чаще всего, создание и инициализация нового процесса, куда загружается программный код, и где выделяется оперативная память для хранения обрабатываемых программой данных. Для каждого нового процесса операционной системой создается один поток исполнения – главный поток процесса. В рамках одного процесса можно создавать дополнительные потоки, но все они будут работать в общем адресном пространстве своего процесса. Потоки также могут иметь приоритеты доступа к вычислительным ресурсам, но их система приоритетов ограничена процессом. Итак, отличия процесса от потока:

  1. Процесс создается и контролируется операционной системой, потоки создаются и контролируются в контексте процесса.
  2. Различные процессы имеют свои собственные адресные пространства, потоки в рамках одного процесса работают в едином адресном пространстве.

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



[Следующая страница]

Компьютерные курсы и курсы программирования
Основы программирования

Курс для начинающих программистов на C# и VB.NET.

SQL 25™

Построение SQL запросов и работа с базой данных.

C# Quick Guide™

Программирование на C#. Краткое руководство.

RegEx

Применение регулярных выражений.

Plug-in архитектура

Примеры программной Plug-in архитектуры.

XML и его расширения

Язык разметки XML и его расширения с примерами.

HTML и разметка гипертекста

Языки HTML, XHTML и CSS с примерами разметки.

Основы веб-дизайна

Основы веб-дизайна: решения типовых задач верстки.

Программирование на PHP

Руководство по программированию на PHP для начинающих.

Справочные материалы

Шаблоны проектирования
Каталог шаблонов проектирования программных компонентов.

Рефакторинг кода
Каталог приемов рефакторинга программного кода.

Гость
Имя

Пароль



Забыли пароль?
Запросите новый здесь
.
Coding Craft. Все права защищены © 2011. Проект Инициативного Народного Фронта Образования - ИНФО-проект.