Получение доступа к стандартному выходному потоку (cout) из сыновней задачи
Поведение выходных данных, записанных в выходной поток stdoutили по м ещенных в объект cout,отличается для различных порожденных PVM-задач. Именно родительский процесс решает, что в конце концов с ними должно произойти. Ко г да выходные данные из порожденно г о потомка поме щ аются в объект coutили cerr,они перехватываются демоном pvmdи упаковываются в стандартные PVM-сообщения, которые отправляются задаче с идентификатором TaskId,заданным родителем. Родительский процесс может связать пару (TaskId, Code)с объектами coutи cerrсвое г о сыновне г о процесса. Это реализуется с помо щ ью функции pvm_setopt(), которая вызывается перед порождением потомка. Если значение TaskIdравно 0,сооб щ ения попадут велу щ ему демону pvmdи будут записаны в е г о журнал ре г истрации ошибок. Порожденный процесс может установить значение переменной TaskIdравным 0или значению, унаследованному от е г о родителя, или собственному значению идентификатора TaskId.Это означает, что именно родительский процесс управляет тем, куда будет записано содержимое объектов coutили cerr.Порожденнал PVM-задача может назначить дру г ие PVM-задачи для получения данных, поме щ енных в объекты coutили cerr.Обычно записью любых важных данных в потоки stdoutили stdinуправляет порождаю щ ая задача, а всем остальным ведает веду щ ий демон pvmd.
Библиотека PVM, отличаю щ аяся большой г ибкостью средств, по д держивает большинство моделей параллельно г о про г раммирования. К достоинствам PVM-среды относится ее способность работать с г етеро г енны м и коллекция м и ко м пьютеров, которые м огут состоять из процессоров, отличаю щ ихся характеристика м и быстродействия, размера м и и архитектурой. По м и м о аппаратной совмести м ости, библиотека PVM прекрасно работает со стандартной С++-библиотекой и систе м ной библиотекой UNIX/Linux. В результате объединения с воз м ожностя м и C++-шаблонов, средств объектно-ориентированно г о про г ра мм ирования и коллекций алгоритмов мо щ ь PVM-среды значительно возрастает. Шаблоны прекрасно вписываются в SPMD-про г ра м мирование. А для расширени я воз м ожностей PVM-среды при испо л ьзовании моде л ей MIMD (MPMD) можно успешно использовать контейнеры и алгоритмы. В г л аве 13 мы подробнее познакомимся со сред СТв +* PVM-биб л иотеки и покажем, как ее можно использовать для С++-реализации МИтегии «классной доски». Эта стратегия — один из основных способов решения 0^ блем параллельного программирования. П**°*
Обработка ошибок, исключительных ситуаций и надежность программного обеспечения
Всегда можно изобрести суперсложные модели, чтобы объяснить множество исследуемых фактов, но ученыи, если он не философ, скорее примет самую простую теорию, которая согласуется со всеми имеющимися у негоданными.
—
Алястер Pu(Alastair Rae), Quantum Physics Illusion or Reality
Одна из главных целей разработки и проектирования программного обеспечения— создать программу, которая бы отвечала требованиям пользователя и работала корректно и надежно. Пользователи требуют от ПО корректности и надежности, независимо от его конкретного назначения. Использование ненадежных программ в любой сфере — финансовой, промышленной, медицинской, научной или военной— может иметь разрушительные последствия. Зависимость людей и механизмов от ПО на всех уровнях нашего общества вынуждает его создателей сделать все возможное, чтобы их детище было надежным, робастным и отказоустойчивым. Эти требования налагают дополнительную ответственность на разработчиков и проектировщиков ПО, которые создают системы, содержащие параллелизм. Программы с параллелизмом или компоненты, которые выполняются в распределенных средах, содержат больше (по сравнению с ПО без параллелизма) программных уровней. Чем больше уровней, тем сложнее управлять таким ПО. Чем выше сложность системы, тем больше изъянов может остаться в ней невыявленными. А чем больше изъянов в ПО, тем выше вероятность того, что оно откажет, причем в самый неподходящий момент.
Читать дальше