лабараторная работа. Теория_к_лабораторным. 1. Применение параллельных вычислений
Скачать 0.7 Mb.
|
1. Применение параллельных вычисленийПараллельные вычисления дают много возможностей для оптимизации быстродействия вашего программного продукта (смотри также https://msdn.microsoft.com/ru-ru/library/dd460713(v=vs.110).aspx), но есть и обратная сторона медали. Параллельные вычисления могут стать источником большого количества ошибок или проявлений некорректного поведения программы, поскольку отладка кода, выполняемого в параллельных потоках намного сложнее отладки последовательно выполняемых инструкций. Значение “намного” иногда соответствует значениям “на порядок”, “в разы” и т.д. С другой стороны, без параллельных вычислений сложно реализовать многие интерактивные сценарии взаимодействия с пользователем, такие как: Специальное форматирование вводимого пользователем текста. Пример такого форматирования - выделение синтаксических ошибок в коде программ, выполняемое интегрированной средой разработки в фоновом режиме. Или выделение орфографических и пунктуационных ошибок в тексте, в ходе работы с текстовым редактором. Подобное форматирование обычно выполняют в параллельных потоках. Выполнение сложных запросов пользователя с последующим оповещением об их завершении. За примером также далеко ходить не надо: скачивание файлов интернет - браузерами выполняется именно по такому сценарию. О степени завершенности загрузки данных в параллельном потоке, пользователь, например, узнает по состоянию прогресс бара, специально созданного для мониторинга скачивания. В геоинформационных системах (ГИС) очень много времени занимает загрузка и отображение пространственных данных. Часто, обработку наиболее насыщенных и объемных слоев выделяют в отдельный параллельный процесс, а пользователь имеет возможность начать работу с системой сразу же после завершения загрузки “быстро загружаемых” слоев. 2. Процессы и потокиПеред тем, как начать, буквально пару слов о процессах и потоках. Многозадачные операционные системы позволяют выполнять несколько вычислительных процессов параллельно. Чаще всего, в таком контексте речь идет о псевдопараллельности, поскольку каждый из процессов в соответствии с определенным ему операционной системой приоритетом, в порядке своей очереди получает доступ к общим (разделяемым) вычислительным ресурсам компьютера. Остальные процессы в это время ждут своей очереди. Как организована псевдопараллельная обработка, и как в распределительных вычислительных системах выглядит истинная многозадачность - не предмет этого раздела. Главное сейчас понять, что такое процесс, что такое поток и какая между ними разница. Как я уже сказал, процесс – это создаваемый и контролируемый операционной системой объект, которому выделяется собственное, изолированное от других процессов адресное пространство и приоритет выполнения на уровне операционной системы. Запуск приложения в многозадачной операционной системе, такой как Microsoft Windows – это, чаще всего, создание и инициализация нового процесса, куда загружается программный код, и где выделяется оперативная память для хранения обрабатываемых программой данных. Для каждого нового процесса операционной системой создается один поток исполнения – главный поток процесса. В рамках одного процесса можно создавать дополнительные потоки, но все они будут работать в общем адресном пространстве своего процесса. Потоки также могут иметь приоритеты доступа к вычислительным ресурсам, но их система приоритетов ограничена процессом. Итак, отличия процесса от потока: Процесс создается и контролируется операционной системой, потоки создаются и контролируются в контексте процесса. Различные процессы имеют свои собственные адресные пространства, потоки в рамках одного процесса работают в едином адресном пространстве. Любые правила существуют, чтобы их нарушать, и изолированность адресного пространства отдельного процесса не исключение. Многозадачные операционные системы предоставляют API для доступа к адресному пространству одного процесса из другого. Подобные программные интерфейсы называют сокетами. Естественно, что такая необходимость возникает не часто, и подобные случаи сложно отнести к рядовым. В этом разделе речь будет идти исключительно об организации параллельных вычислений посредством многопоточности в контексте одного процесса. |