Закончил читать книгу A Pattern Language for Parallel Programming. Точнее говоря, закончил чтение первых пяти глав (шестая глава и приложения содержит поверхностное описание деталей реализации, которые мне были не интересны).
Впечатление двоякое. Книга ценна тем, что погружает неподготовленного читателя в область параллельных вычислений (наверное, речь можно вести даже о High Perfomance Computing). При ее чтении становится понятной разница между parallel programming и concurrent programming. Хотя эти два термина в последнее время часто упоминают вместе (и даже иногда взаимозаменяемо), все-таки это две разные вещи. И данная книга помогает хорошо это осознать.
Поскольку я никогда прежде не был связан с parallel programming, мне было интересно прикоснуться к этому миру. Чему помогают используемые в книге примеры: три задачи, различные подходы к решению которых обсуждаются по ходу изложения материала.
С другой стороны, читать ее было неинтересно (собственно, как и вообще книги о паттернах). У меня сложилось впечатление, что все то же самое можно было гораздо короче и увлекательнее написать, если бы авторы не пытались выстроить классификацию паттернов. Поскольку по ходу чтения постоянно ловил себя на мысли о том, что описание очередного паттерна очень похоже на описание одного из предыдущих, но с небольшими вариациями. Тем не менее, авторы продолжали следовать своему стилю, снова и снова озвучивая похожие цели, достоинства и недостатки каждого паттерна.
Примечательно, что большую часть нужного мне впечатления о parallel programming в очень хорошем, сжатом и четком виде я получил от небольшой статьи Introduction to Parallel Computing: Part 1, ссылка на которую пришла в RSS-ленте совсем недавно.
Резюме. Надеюсь, что мне не придется еще раз обращаться к этой книге. Ну разве что, за списком ссылок для того, чтобы найти что-нибудь более достойное и интересное.
"не не придется еще раз обращаться к этой книге"? :)
ОтветитьУдалитьСпасибо! Одну буковку потерял по дороге :)
ОтветитьУдалитьЯ тут недавно подумал об "actor/agent-oriented patterns"... Не над книгой, конечно. А просто, есть ли вообще там что-то, можно ли набрать хотя бы с десяток паттернов, есть ли какие-то паттерны относящиеся к надёжности, сопровождаемости, расширяемости, производительности?
ОтветитьУдалитьК сожалению, ничего такого с ходу не припоминается. К тому же, я не много пока читал материалов об actor model (а там ведь чуть ли не целая теория была придумана).
ОтветитьУдалитьВозможно, таких материалов не так уж и много в природе. Ведь, по большому счету, модель агентов не сильно распространена. На ум сразу приходят Erlang (а это, в основном, внутренние проекты Ericsson-а), FIPA (которые вряд ли имели серьезное применение на практике), а так же JMS и разные MessageQueue (от Tibco, IBM, MS). Может быть в каких-то рекомендациях по MQ-продуктам можно будет нарыть материал по actor pattern-ам.
Я даже не столько о почитать где-нибудь, сколько о составить самому (в идеале совместно с каким-нибудь разработчиком имеющим опыт разработки серьёзного ПО на основе агентного подхода и разработавшим собственный агентный фреймворк). Почитать бесспорно было бы полезно и занятно, но я лично ничего подобного не видел (хотя возможно вокруг каких-то специализированных коммьюнити (Erlang, Tibco) что-то такое есть, но это зарыто где-то внутри их форумов/мейлингов).
ОтветитьУдалитьЦель ни в коем не время убийство, т.е. для начала хватило бы просто выявить и дать названия, на крайний случай, если не понятно из названия, то дать комментарий в пару предложений.
Но первая задача - это выяснить, есть ли вообще эти паттерны, т.е. можно ли найти хотя бы пяток хороших паттернов.
Кстати недавно у Джо Дуффи вышла книга "Concurrent Programming on Windows":
ОтветитьУдалитьhttp://www.ddj.com/go-parallel/article/showArticle.jhtml?articleID=213000279
Толмуд на 1000 страниц. Сам не читал, но как понимаю, она более "приземленная"/практическая, и освещает все основные технологии: PLINQ, TPL, Native API и т.д., а так же освещает все основные концепции - взаимное исключение, производительность/масштабируемость, неблокирующие алгоритмы и т.д.
Написать что-нибудь -- это хорошо :) Я, например, хотел бы сделать вторую часть SObjectizer Book: вроде описания опыта использования SObjectizer. Только еще хотелось бы почитать чего-нибудь, а то получается ситуация, что "чукча не читатель, чукча писатель". :)
ОтветитьУдалитьА по поводу паттернов, так я вообще очень большой скептик в их отношении. Как по мне, так лучше простые рассказы о том, как какие-то задачи решались. Почему они именно так решались, с какими проблемами столкнулись, как их обошли, что не удалось обойти.
Так а чем и первое и второе не паттерны? :)
ОтветитьУдалитьЕсли проблема более-менее общая (иначе зачем её описывать), то описание как её можно решать, какие при этом возникают проблемы, какие получили плюсы - и есть паттерн, разьве нет?
Ну это уже holy war начинается :) Пока можно сказать так, что у меня есть предубеждение как против самого термина паттерн, так и против формирование набора паттернов, так и против популяризации подобных наборов. Но подробнее, может быть, я отдельный блог-пост напишу, чтобы здесь не флудить.
ОтветитьУдалить