вторник, 3 февраля 2009 г.

Впечатления от книги "A Pattern Language for Parallel Programming"

Закончил читать книгу A Pattern Language for Parallel Programming. Точнее говоря, закончил чтение первых пяти глав (шестая глава и приложения содержит поверхностное описание деталей реализации, которые мне были не интересны).

Впечатление двоякое. Книга ценна тем, что погружает неподготовленного читателя в область параллельных вычислений (наверное, речь можно вести даже о High Perfomance Computing). При ее чтении становится понятной разница между parallel programming и concurrent programming. Хотя эти два термина в последнее время часто упоминают вместе (и даже иногда взаимозаменяемо), все-таки это две разные вещи. И данная книга помогает хорошо это осознать.

Поскольку я никогда прежде не был связан с parallel programming, мне было интересно прикоснуться к этому миру. Чему помогают используемые в книге примеры: три задачи, различные подходы к решению которых обсуждаются по ходу изложения материала.

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

Примечательно, что большую часть нужного мне впечатления о parallel programming в очень хорошем, сжатом и четком виде я получил от небольшой статьи Introduction to Parallel Computing: Part 1, ссылка на которую пришла в RSS-ленте совсем недавно.

Резюме. Надеюсь, что мне не придется еще раз обращаться к этой книге. Ну разве что, за списком ссылок для того, чтобы найти что-нибудь более достойное и интересное.

9 комментариев:

Dmitry Vyukov комментирует...

"не не придется еще раз обращаться к этой книге"? :)

eao197 комментирует...

Спасибо! Одну буковку потерял по дороге :)

Dmitry Vyukov комментирует...

Я тут недавно подумал об "actor/agent-oriented patterns"... Не над книгой, конечно. А просто, есть ли вообще там что-то, можно ли набрать хотя бы с десяток паттернов, есть ли какие-то паттерны относящиеся к надёжности, сопровождаемости, расширяемости, производительности?

eao197 комментирует...

К сожалению, ничего такого с ходу не припоминается. К тому же, я не много пока читал материалов об actor model (а там ведь чуть ли не целая теория была придумана).

Возможно, таких материалов не так уж и много в природе. Ведь, по большому счету, модель агентов не сильно распространена. На ум сразу приходят Erlang (а это, в основном, внутренние проекты Ericsson-а), FIPA (которые вряд ли имели серьезное применение на практике), а так же JMS и разные MessageQueue (от Tibco, IBM, MS). Может быть в каких-то рекомендациях по MQ-продуктам можно будет нарыть материал по actor pattern-ам.

Dmitry Vyukov комментирует...

Я даже не столько о почитать где-нибудь, сколько о составить самому (в идеале совместно с каким-нибудь разработчиком имеющим опыт разработки серьёзного ПО на основе агентного подхода и разработавшим собственный агентный фреймворк). Почитать бесспорно было бы полезно и занятно, но я лично ничего подобного не видел (хотя возможно вокруг каких-то специализированных коммьюнити (Erlang, Tibco) что-то такое есть, но это зарыто где-то внутри их форумов/мейлингов).

Цель ни в коем не время убийство, т.е. для начала хватило бы просто выявить и дать названия, на крайний случай, если не понятно из названия, то дать комментарий в пару предложений.
Но первая задача - это выяснить, есть ли вообще эти паттерны, т.е. можно ли найти хотя бы пяток хороших паттернов.

Dmitry Vyukov комментирует...

Кстати недавно у Джо Дуффи вышла книга "Concurrent Programming on Windows":
http://www.ddj.com/go-parallel/article/showArticle.jhtml?articleID=213000279

Толмуд на 1000 страниц. Сам не читал, но как понимаю, она более "приземленная"/практическая, и освещает все основные технологии: PLINQ, TPL, Native API и т.д., а так же освещает все основные концепции - взаимное исключение, производительность/масштабируемость, неблокирующие алгоритмы и т.д.

eao197 комментирует...

Написать что-нибудь -- это хорошо :) Я, например, хотел бы сделать вторую часть SObjectizer Book: вроде описания опыта использования SObjectizer. Только еще хотелось бы почитать чего-нибудь, а то получается ситуация, что "чукча не читатель, чукча писатель". :)

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

Dmitry Vyukov комментирует...

Так а чем и первое и второе не паттерны? :)
Если проблема более-менее общая (иначе зачем её описывать), то описание как её можно решать, какие при этом возникают проблемы, какие получили плюсы - и есть паттерн, разьве нет?

eao197 комментирует...

Ну это уже holy war начинается :) Пока можно сказать так, что у меня есть предубеждение как против самого термина паттерн, так и против формирование набора паттернов, так и против популяризации подобных наборов. Но подробнее, может быть, я отдельный блог-пост напишу, чтобы здесь не флудить.