Найти тему
Computer Science

Ostep глава 34. Summary Dialogue on Concurrency - перевод

Профессор: Итак, у тебя сейчас болит голова?

Студент: (принимает две таблетки средства от головной боли) Ну, немного. Трудно думать обо всех способах чередования потоков

Профессор: Действительно, это так. Меня всегда поражает, что при одновременном выполнении, всего несколько строк кода могут стать практически невозможными для понимания

Студент: Я тоже! Мне, специалисту по информатике, немного неловко не иметь возможности разобраться в пяти строках кода

Профессор: О, не расстраивайся так сильно. Если вы просмотрите первые статьи по параллельным алгоритмам, то увидите, что они иногда ошибочны! И авторы часто профессора!

Студент: (вздыхает) Профессора могут ... ммм... ошибаться?

Профессор: Да, это так. Только никому не говорите — это один из наших коммерческих секретов

Студент: Я поклялся хранить тайну. Но если о параллельном коде так трудно думать и его так трудно исправить, как мы должны писать правильный параллельный код?

Профессор: Что ж, это и есть настоящий вопрос, не так ли? Я думаю, все начинается с нескольких простых вещей. Во-первых, делайте это просто! Избегайте сложных взаимодействий между потоками и используйте хорошо известные и проверенные способы управления взаимодействиями потоков.

Студент: Например, простая блокировка и, возможно, очередь producer-consumer?

Профессор: Точно! Это общие парадигмы, и вы должны быть в состоянии создавать рабочие решения, учитывая то, что вы узнали. Во-вторых, используйте параллелизм только тогда, когда это абсолютно необходимо; избегайте его, если это вообще возможно. Нет ничего хуже, чем преждевременная оптимизация программы

Студент: Я понимаю — зачем добавлять потоки, если они вам не нужны?

Профессор: Точно. В-третьих, если вам действительно нужен параллелизм, ищите его в других упрощенных формах. Например, метод MapReduce для написания кода параллельного анализа данных является отличным примером достижения параллелизма без необходимости обрабатывать какие-либо ужасающие сложности блокировок, переменных условий и других неприятных вещей, о которых мы говорили

Стедент: MapReduce, да? Звучит интересно — мне придется прочитать об этом подробнее самостоятельно.

Профессор: Хорошо! Вы должны. В конце концов, вам придется многое из этого сделать, поскольку то, чему мы учимся вместе, может служить лишь самым поверхностным введением в то богатство знаний, которое существует в мире. Читайте, читайте и еще раз читайте! А затем попробуйте что-нибудь, напишите какой-нибудь код, а затем напишите еще что-нибудь. И больше практикуйтесь; помимо того, что описано в этой книге, существует множество других ресурсов. Как говорит Гладуэлл в своей книге “Outliers”, вам нужно потратить на что-то примерно 10 000 часов, чтобы стать настоящим экспертом. Ты не можешь делать это только во время занятий!

Студент: Вау, я не уверен, угнетает это или поднимает настроение. Но я предположу последнее и приступлю к работе! Пришло время написать еще немного параллельного кода...

PS Для статьи сгенерировал изображение с помощью rudalle.ru промпт - название главы