Узнайте о многопоточности, параллелизме и параллельном программировании с практическими и забавными примерами из Google Go Lang.
Настроение на встрече на 12-м этаже международного инвестиционного банка было мрачным. Разработчики фирмы встретились, чтобы обсудить наилучший способ продвижения вперед после сбоя критически важного приложения и сбоя всей системы.
«Ребята, у нас здесь серьезная проблема. Я узнал, что перебои были вызваны состоянием гонки в нашем коде, появившемся некоторое время назад и сработавшим вчера вечером». говорит Марк Адамс, старший разработчик.
Комната замолкает. Автомобили за окнами от пола до потолка медленно и бесшумно ползут в плотном городском потоке. Старшие разработчики сразу понимают серьезность ситуации, понимая, что теперь они будут работать круглосуточно, чтобы исправить проблему и разобраться в беспорядке в хранилище данных. Менее опытные разработчики понимают, что состояние гонки серьезное, но не знают точно, что его вызывает, и поэтому держат язык за зубами.
В конце концов Брайан Холмс, менеджер по доставке приложений, нарушает молчание: «Приложение работает без проблем в течение нескольких месяцев, мы не выпустили ни одного апдейта кода за последенее время, как это возможно, что программное обеспечение просто сломалось ?!»
Все качают головами и возвращаются к своему столу, оставляя Брайана в комнате одного, озадаченного. Он достает свой телефон и гуглит "состояние гонки".
Звучит знакомо? Сколько раз вы слышали, как другой разработчик говорил об использовании потоков и параллельного программирования для решения конкретной проблемы, но из страха вы не участвовали в обсуждении?
Вот маленький секрет, которым старшие разработчики никогда не поделятся ... Многопоточное программирование не намного сложнее, чем обычное программирование. Разработчики боятся параллельного программирования, потому что считают, что это сложная тема, с которой могут играть только опытные разработчики.
Это далеко от правды. Наши умы очень привыкли иметь дело с параллелизмом. Фактически мы делаем это в нашей повседневной жизни без каких-либо проблем, но почему-то мы пытаемся перевести это в наш код. Одна из причин этого заключается в том, что мы не знакомы с концепциями и инструментами, доступными нам для управления этим параллелизмом. Этот курс призван помочь вам понять, как использовать многопоточные инструменты и концепции для управления параллельным программированием. Он разработан так, чтобы быть максимально практичным. Мы начнем с некоторой теории параллелизма, а затем объясним, как операционная система обрабатывает несколько процессов и потоков. Позже мы переходим к объяснению множества доступных инструментов путем решения примеров проблем с использованием многопоточности.
В этом курсе мы используем язык программирования Google Go с его программами, однако изученные здесь концепции могут быть применены к большинству языков программирования.