👨💻Завершил чтение книги "Head First. Паттерны проектирования." Фримен Э., Робсон Э., Сьерра К., Бейтс Б
Классная книга. Что тут можно еще добавить?
Как-то давно я открывал эту книгу, но закрыл ее на первой же главе. У меня было убеждение, что это крайне сложная тема. И читая про все эти абстракции, у меня просто закипал мозг. Я был однозначно не готов для знакомства с темой.
Сейчас же я прошел довольно большой путь прежде, чем заново открыть эту книгу. Последовательно изучил множество базовых тем в программировании, прошел курс по ООАП. Все это позволило изучить эту книгу практически на одном дыхании. Я читал главу за главой, изучал код на Java (который видел впервые), пробовал воспроизвести некоторые примеры на Python, и практически все сразу понимал. Это реально круто.
Одной из полезнейших глав, на мой взгляд, является последняя глава про использование паттернов в реальном мире. В этой главе напоминают о том, что такое паттерны сами по себе, когда и где их использовать, акцентируют внимание, что
- во-первых, это не серебряная пуля,
- во-вторых, предлагают 100 раз подумать прежде, чем использовать паттерны,
- в-третьих, акцентируют внимание на том, что нужно проектировать системы не на основе паттернов проектирования, а прежде всего на основе ОО-принципов.
Было забавно прочитать следующие строки в конце книги:
"Одну минуту — я прочитала всю книгу, а теперь вы говорите, чтобы я НЕ ИСПОЛЬЗОВАЛА паттерны?''
Ответ несет в себе глубокий смысл:
"Конечно, мы хотим, чтобы вы использовали паттерны! Но мы еще больше хотим, чтобы вы были хорошим ОО-проектировщиком."
Структура книги, картинки, примеры кода, диаграммы, диалоги между паттернами у камина, диалоги между учителем и учеником - все это позволяет с интересом и максимально эффективно провести время за книгой.
Рекомендую.
10/10.
Классная книга. Что тут можно еще добавить?
Как-то давно я открывал эту книгу, но закрыл ее на первой же главе. У меня было убеждение, что это крайне сложная тема. И читая про все эти абстракции, у меня просто закипал мозг. Я был однозначно не готов для знакомства с темой.
Сейчас же я прошел довольно большой путь прежде, чем заново открыть эту книгу. Последовательно изучил множество базовых тем в программировании, прошел курс по ООАП. Все это позволило изучить эту книгу практически на одном дыхании. Я читал главу за главой, изучал код на Java (который видел впервые), пробовал воспроизвести некоторые примеры на Python, и практически все сразу понимал. Это реально круто.
Одной из полезнейших глав, на мой взгляд, является последняя глава про использование паттернов в реальном мире. В этой главе напоминают о том, что такое паттерны сами по себе, когда и где их использовать, акцентируют внимание, что
- во-первых, это не серебряная пуля,
- во-вторых, предлагают 100 раз подумать прежде, чем использовать паттерны,
- в-третьих, акцентируют внимание на том, что нужно проектировать системы не на основе паттернов проектирования, а прежде всего на основе ОО-принципов.
Было забавно прочитать следующие строки в конце книги:
"Одну минуту — я прочитала всю книгу, а теперь вы говорите, чтобы я НЕ ИСПОЛЬЗОВАЛА паттерны?''
Ответ несет в себе глубокий смысл:
"Конечно, мы хотим, чтобы вы использовали паттерны! Но мы еще больше хотим, чтобы вы были хорошим ОО-проектировщиком."
Структура книги, картинки, примеры кода, диаграммы, диалоги между паттернами у камина, диалоги между учителем и учеником - все это позволяет с интересом и максимально эффективно провести время за книгой.
Рекомендую.
10/10.
🔥12
Мои итоги 2023 года 🌲🎄
Для меня это год открытий. Такого кол-ва изменений и нового жизненного опыта я не получал ранее.
Выделил 3 темы:
- достижение целей по доходу;
- профессиональное развитие;
- прочее.
———
С наступающим НГ!🥂
https://telegra.ph/Itogi-2023-goda-12-31-11
Для меня это год открытий. Такого кол-ва изменений и нового жизненного опыта я не получал ранее.
Выделил 3 темы:
- достижение целей по доходу;
- профессиональное развитие;
- прочее.
———
С наступающим НГ!🥂
https://telegra.ph/Itogi-2023-goda-12-31-11
Telegraph
Итоги 2023 года
1) Поставил цель по доходу и достиг в поставленные сроки. Это супер-мега-крутой опыт! Ранее я ставил цели и шел к ним вялотекущим темпом. Привычным для меня темпом, который называется "плыть по течению". Я просто выбирал направление и выполнял какие-нибудь…
👏6🔥4🎄4
Была первая тренировка в зале с тренером после травмы рук!
🔥🔥🔥
+100500 к энергии!
🔥🔥🔥
+100500 к энергии!
🔥8
[Начал год с изучения highload-систем]
Что это такое? Какие виды бывают? С какими проблемами и задачами сталкивались и сталкиваются разработчики? Какие есть решения? Для чего они создаются? Из каких базовых механизмов строятся такие системы?
Это обширная, крайне важная и очень интересная тема. Решил в этом году копнуть в глубину данного вопроса. Тем более я сейчас сталкиваюсь с такими системами ежедневно на работе.
Например, выделяют 2 класса таких систем:
1) Приложения, высоконагруженные данными (data-intensive applications, DIA) - класс ситуаций, когда проблемой становится объём, качество или сложность данных, обрабатываемых системой.
2) Приложения, высоконагруженные вычислениями (compute-intensive, CIA) - класс ситуаций, когда проблемой становится нагрузка на процессоры.
--
Для погружения в тему взял книгу "Высоконагруженные приложения. Программирование, масштабирование, поддержка" Мартин Клеппман.
Что это такое? Какие виды бывают? С какими проблемами и задачами сталкивались и сталкиваются разработчики? Какие есть решения? Для чего они создаются? Из каких базовых механизмов строятся такие системы?
Это обширная, крайне важная и очень интересная тема. Решил в этом году копнуть в глубину данного вопроса. Тем более я сейчас сталкиваюсь с такими системами ежедневно на работе.
Например, выделяют 2 класса таких систем:
1) Приложения, высоконагруженные данными (data-intensive applications, DIA) - класс ситуаций, когда проблемой становится объём, качество или сложность данных, обрабатываемых системой.
2) Приложения, высоконагруженные вычислениями (compute-intensive, CIA) - класс ситуаций, когда проблемой становится нагрузка на процессоры.
--
Для погружения в тему взял книгу "Высоконагруженные приложения. Программирование, масштабирование, поддержка" Мартин Клеппман.
👍9
[SQL, Spark, брокеры сообщений или итоги аттестации]
На прошлой неделе завершилась моя первая аттестация с прицелом на повышение грейда внутри компании.
Аттестацию проходил по роли Инженер данных.
По итогам 2-х технических интервью грейд повысить не удалось.
Но, у меня есть 2 месяца, чтобы подтянуть следующие темы:
- SQL (практика)
- Spark (больше теория)
- Брокеры сообщений (теория)
Через 2 месяца пробую пройти тех. интервью еще раз.
———
По всем темам у меня есть материалы для подготовки.
Планирую каждый день:
- решать задачи по SQL,
- изучать предложенные материалы по Spark и брокерам сообщений.
На прошлой неделе завершилась моя первая аттестация с прицелом на повышение грейда внутри компании.
Аттестацию проходил по роли Инженер данных.
По итогам 2-х технических интервью грейд повысить не удалось.
Но, у меня есть 2 месяца, чтобы подтянуть следующие темы:
- SQL (практика)
- Spark (больше теория)
- Брокеры сообщений (теория)
Через 2 месяца пробую пройти тех. интервью еще раз.
———
По всем темам у меня есть материалы для подготовки.
Планирую каждый день:
- решать задачи по SQL,
- изучать предложенные материалы по Spark и брокерам сообщений.
👍7👏1
2 часа ночи. Семья спит.
А у меня:
- декларативная вычислительная модель;
- модель обмена сообщениями (модель акторов);
А у меня:
- декларативная вычислительная модель;
- модель обмена сообщениями (модель акторов);
🔥8🤯2
[Мои итоги первого квартала 2024 года]
1) Познакомился со следующими параллельными моделями программирования:
- декларативная параллельная модель;
- модель обмена сообщщениями;
- параллельная модель с поддержкой состояния;
- распределенная вычислительная модель (в процессе);
2) Прочитал "Компьютерные сети" Таненбаум Э.;
3) Прочитал "Современные операционные системы", Таненбаум Э.;
4) Изучил С;
5) Написал свою виртуальную стековую машину;
На работе:
6) Получил премию по итогам прошлого года (никогда ранее такие премии не получал);
Ради шутки могу сравнить это только со страховой выплатой за поломанные руки, которую получил в прошлом году)))
А так первый квартал выдался сильно насыщенным.
7) Съездили с семьей в Сочи, катались на велосипеде по Олимпийскому парку.
8) Закрыл одну из целей на год - купил машину в семью (б/у). Последний раз у меня машина была 7 лет назад).
9) Весь квартал ходил в зал с тренером два раза в неделю (результат огонь!).
10) Важно! Оборудовал себе рабочее место дома (стол, кресло, хороший монитор).
А как у вас прошел первый квартал?
1) Познакомился со следующими параллельными моделями программирования:
- декларативная параллельная модель;
- модель обмена сообщщениями;
- параллельная модель с поддержкой состояния;
- распределенная вычислительная модель (в процессе);
2) Прочитал "Компьютерные сети" Таненбаум Э.;
3) Прочитал "Современные операционные системы", Таненбаум Э.;
4) Изучил С;
5) Написал свою виртуальную стековую машину;
На работе:
6) Получил премию по итогам прошлого года (никогда ранее такие премии не получал);
Ради шутки могу сравнить это только со страховой выплатой за поломанные руки, которую получил в прошлом году)))
А так первый квартал выдался сильно насыщенным.
7) Съездили с семьей в Сочи, катались на велосипеде по Олимпийскому парку.
8) Закрыл одну из целей на год - купил машину в семью (б/у). Последний раз у меня машина была 7 лет назад).
9) Весь квартал ходил в зал с тренером два раза в неделю (результат огонь!).
10) Важно! Оборудовал себе рабочее место дома (стол, кресло, хороший монитор).
А как у вас прошел первый квартал?
🔥18
[C 1 апреля]
Спешу сообщить, что в первом квартале я был не так хорош и пункты со 2-го по 5-й не являются действительными. К сожалению.
Но я хочу в некотором будущем поработать над ними.
Спешу сообщить, что в первом квартале я был не так хорош и пункты со 2-го по 5-й не являются действительными. К сожалению.
Но я хочу в некотором будущем поработать над ними.
😁8👍1
[Цели на 2 квартал]
Хочу попробовать вернуться к формату ежедневных отчетов в канале.
Не знаю, что из этого выйдет. Боюсь облажаться. Но стоит попробовать.
Сегодня хочу опубликовать некоторые цели на квартал.
1) Пройти аттестацию:
- изучить SPARK;
- изучить брокеры сообщений;
- подтянуть SQL;
2) Завершить знакомство с параллельными моделями программирования;
3) Доп. активности:
- прочитать "Операционные системы. Основы и принципы" Х. Дейтел
Нашел 2 издания: 1987-го и 2009-го. Было бы интересно сравнить). А потом хотел бы перейти к Таненбауму)
---
Сегодня в рамках знакомства с распределенной вычислительной моделью изучал модель отказа/сбоя:
- полный и частичный отказ,
- простые случаи обработки сбоев,
- синхронное и асинхронное обнаружение сбоев,
- обработчик бездействия сети,
- тайм-ауты и что с ними делать.
👨💻
Хочу попробовать вернуться к формату ежедневных отчетов в канале.
Не знаю, что из этого выйдет. Боюсь облажаться. Но стоит попробовать.
Сегодня хочу опубликовать некоторые цели на квартал.
1) Пройти аттестацию:
- изучить SPARK;
- изучить брокеры сообщений;
- подтянуть SQL;
2) Завершить знакомство с параллельными моделями программирования;
3) Доп. активности:
- прочитать "Операционные системы. Основы и принципы" Х. Дейтел
Нашел 2 издания: 1987-го и 2009-го. Было бы интересно сравнить). А потом хотел бы перейти к Таненбауму)
---
Сегодня в рамках знакомства с распределенной вычислительной моделью изучал модель отказа/сбоя:
- полный и частичный отказ,
- простые случаи обработки сбоев,
- синхронное и асинхронное обнаружение сбоев,
- обработчик бездействия сети,
- тайм-ауты и что с ними делать.
👨💻
👍8👏1
[Spark и не только]
Сегодня начал просмотр материалов по Spark. Узнал немного историю создания и некоторую базу.
Apache Spark ™ — это многоязычный движок для выполнения обработки данных в локальном или кластерном режимах со встроенными модулями для SQL, потоковой передачи, машинного обучения и обработки графов.
В кластерном режиме приложения Spark выполняются как независимые наборы процессов, координируемые объектом SparkContext в основной программе (называемым программой-драйвером).
Об этой архитектуре следует отметить несколько полезных вещей:
1) Каждое приложение получает свои собственные процессы-исполнители, которые работают на протяжении всей работы приложения и выполняют задачи в нескольких потоках. Преимущество этого заключается в изоляции приложений друг от друга как со стороны планирования (каждый драйвер планирует свои собственные задачи), так и со стороны исполнителя (задачи из разных приложений выполняются в разных JVM). Однако это также означает, что данные не могут совместно использоваться различными приложениями Spark (экземплярами SparkContext) без их записи во внешнюю систему хранения.
2) Spark не зависит от базового менеджера ресурсов. Поскольку он может создавать процессы-исполнители и они взаимодействуют друг с другом, его относительно легко запустить даже в менеджере ресурсов, который также поддерживает другие приложения (например, YARN/Kubernetes).
3) Программа-драйвер должна прослушивать и принимать входящие соединения от своих исполнителей на протяжении всего своего существования (например, см. spark.driver.port в разделе конфигурации сети). Таким образом, программа-драйвер должна иметь сетевую адресацию с рабочих узлов.
4) Поскольку драйвер планирует задачи в кластере, его следует запускать рядом с рабочими узлами, желательно в той же локальной сети. Если вы хотите отправлять запросы в кластер удаленно, лучше открыть RPC для драйвера и заставить его отправлять операции поблизости, чем запускать драйвер далеко от рабочих узлов.
———
По распределенной вычислительной модели знакомился с:
- вопросом безопасности распределенных систем;
- общей схемой разработки распределенного приложения;
———
"Операционные системы. Основы и принципы" Х. Дейтел — 2,5%
Сегодня начал просмотр материалов по Spark. Узнал немного историю создания и некоторую базу.
Apache Spark ™ — это многоязычный движок для выполнения обработки данных в локальном или кластерном режимах со встроенными модулями для SQL, потоковой передачи, машинного обучения и обработки графов.
В кластерном режиме приложения Spark выполняются как независимые наборы процессов, координируемые объектом SparkContext в основной программе (называемым программой-драйвером).
Об этой архитектуре следует отметить несколько полезных вещей:
1) Каждое приложение получает свои собственные процессы-исполнители, которые работают на протяжении всей работы приложения и выполняют задачи в нескольких потоках. Преимущество этого заключается в изоляции приложений друг от друга как со стороны планирования (каждый драйвер планирует свои собственные задачи), так и со стороны исполнителя (задачи из разных приложений выполняются в разных JVM). Однако это также означает, что данные не могут совместно использоваться различными приложениями Spark (экземплярами SparkContext) без их записи во внешнюю систему хранения.
2) Spark не зависит от базового менеджера ресурсов. Поскольку он может создавать процессы-исполнители и они взаимодействуют друг с другом, его относительно легко запустить даже в менеджере ресурсов, который также поддерживает другие приложения (например, YARN/Kubernetes).
3) Программа-драйвер должна прослушивать и принимать входящие соединения от своих исполнителей на протяжении всего своего существования (например, см. spark.driver.port в разделе конфигурации сети). Таким образом, программа-драйвер должна иметь сетевую адресацию с рабочих узлов.
4) Поскольку драйвер планирует задачи в кластере, его следует запускать рядом с рабочими узлами, желательно в той же локальной сети. Если вы хотите отправлять запросы в кластер удаленно, лучше открыть RPC для драйвера и заставить его отправлять операции поблизости, чем запускать драйвер далеко от рабочих узлов.
———
По распределенной вычислительной модели знакомился с:
- вопросом безопасности распределенных систем;
- общей схемой разработки распределенного приложения;
———
"Операционные системы. Основы и принципы" Х. Дейтел — 2,5%
🔥3
[Заканчиваю знакомство с распределенной вычислительной моделью]
Тема крайне интересная и довольно сложная. Уверен, что буду возвращаться к ней еще много раз и буду изучать вглубь.
Было интересно посмотреть в чем разница с параллельной моделью программирования и в чем распределенная модель считается сложнее.
Также узнал о:
- 4-х типах распределенных систем;
- сущностях программы с состоянием, без состояния и с однократным присваиванием;
- видах распределенного поведения;
- открытом и закрытом распределенном вычислениях;
- способах именования объектов (ссылки, имена, тикеты, url);
- распределенной блокировке;
- мобильных (кэшированных) объектах, стационарных и асинхронных;
- распределенных протоколах;
- распределенном алгоритме унификации для dataflow-переменных и потоков;
- ленивом и жадном связывании;
- модели отказов/сбоев;
- вопросах безопасности распределенных систем;
———
"Операционные системы. Основы и принципы" Х. Дейтел — 4,3% (+1,7%)
Тема крайне интересная и довольно сложная. Уверен, что буду возвращаться к ней еще много раз и буду изучать вглубь.
Было интересно посмотреть в чем разница с параллельной моделью программирования и в чем распределенная модель считается сложнее.
Также узнал о:
- 4-х типах распределенных систем;
- сущностях программы с состоянием, без состояния и с однократным присваиванием;
- видах распределенного поведения;
- открытом и закрытом распределенном вычислениях;
- способах именования объектов (ссылки, имена, тикеты, url);
- распределенной блокировке;
- мобильных (кэшированных) объектах, стационарных и асинхронных;
- распределенных протоколах;
- распределенном алгоритме унификации для dataflow-переменных и потоков;
- ленивом и жадном связывании;
- модели отказов/сбоев;
- вопросах безопасности распределенных систем;
———
"Операционные системы. Основы и принципы" Х. Дейтел — 4,3% (+1,7%)
🔥5
———
"Операционные системы. Основы и принципы" Х. Дейтел — 17,2% (+12,9%)
"Операционные системы. Основы и принципы" Х. Дейтел — 17,2% (+12,9%)
👍5
[Про жизнь]
Жизнь - интересная, непредсказуемая, удивительная штука, которая с завидной регулярностью заставляет пересмотреть некоторые свои взгляды на 180 градусов.
Спустя годы выясняется, что многие принципы, которые ты считал единственно верными, оказываются ошибочными и в корне неверными. То, что ты ранее считал ужасным, неправильным, является единственно верным.
Осознание данных фактов бывает крайне неприятным процессом. Но тут ты либо признаешь это и делаешь работу над ошибками, либо ты теряешь всё.
Жизнь - интересная, непредсказуемая, удивительная штука, которая с завидной регулярностью заставляет пересмотреть некоторые свои взгляды на 180 градусов.
Спустя годы выясняется, что многие принципы, которые ты считал единственно верными, оказываются ошибочными и в корне неверными. То, что ты ранее считал ужасным, неправильным, является единственно верным.
Осознание данных фактов бывает крайне неприятным процессом. Но тут ты либо признаешь это и делаешь работу над ошибками, либо ты теряешь всё.
💯13❤2
[Что такое Data Lake?]
Привет, друзья! Сегодня хочу рассказать о Data Lake, одном из ключевых компонентов в современной работе с большими данными.
Data Lake — это хранилище, которое позволяет хранить огромное количество структурированных и неструктурированных данных. В отличие от традиционных баз данных, Data Lake позволяет загружать данные в их оригинальном формате, а затем обрабатывать и анализировать их по мере необходимости.
Основные преимущества Data Lake:
Гибкость: можно хранить любые данные в любом формате.
Масштабируемость: легко справляется с увеличением объема данных.
Экономичность: хранение данных в сыром виде обходится дешевле.
Почему Data Lake так популярен:
Разнообразие данных: Современные компании работают с огромным количеством разнообразных данных, включая логи, социальные медиа, данные IoT и многое другое. Data Lake позволяет легко хранить и анализировать все эти данные в одном месте.
Гибкость анализа: Data Lake поддерживает различные аналитические инструменты и технологии, включая машинное обучение, аналитические платформы и SQL-запросы. Это позволяет аналитикам и разработчикам быстро адаптироваться к новым задачам и требованиям.
Поддержка масштабных данных: В эпоху больших данных возможность быстро масштабировать хранилище данных становится критически важной. Data Lake обеспечивает высокую масштабируемость без значительных затрат на инфраструктуру.
Быстрое внедрение инноваций: Возможность быстро интегрировать новые технологии и подходы к обработке данных делает Data Lake идеальным решением для компаний, стремящихся к инновациям.
Основные недостатки Data Lake:
Сложность управления: Без надлежащей структуры и управления Data Lake может превратиться в "болото данных" (data swamp), где трудно найти нужные данные.
Проблемы безопасности: Хранение большого объема данных в одном месте требует усиленных мер безопасности для защиты от утечек и несанкционированного доступа.
Требования к знаниям: Эффективное использование Data Lake требует знаний и опыта в управлении данными и аналитике, что может быть проблемой для компаний с ограниченными ресурсами.
Качество данных: Поскольку данные хранятся в их сыром виде, может возникнуть проблема с обеспечением их качества и консистентности.
———
В следующем посте расскажу, какие инструменты используются для управления Data Lake и как они помогают решать повседневные задачи.
#BigData #DataLake #Python #IT
Привет, друзья! Сегодня хочу рассказать о Data Lake, одном из ключевых компонентов в современной работе с большими данными.
Data Lake — это хранилище, которое позволяет хранить огромное количество структурированных и неструктурированных данных. В отличие от традиционных баз данных, Data Lake позволяет загружать данные в их оригинальном формате, а затем обрабатывать и анализировать их по мере необходимости.
Основные преимущества Data Lake:
Гибкость: можно хранить любые данные в любом формате.
Масштабируемость: легко справляется с увеличением объема данных.
Экономичность: хранение данных в сыром виде обходится дешевле.
Почему Data Lake так популярен:
Разнообразие данных: Современные компании работают с огромным количеством разнообразных данных, включая логи, социальные медиа, данные IoT и многое другое. Data Lake позволяет легко хранить и анализировать все эти данные в одном месте.
Гибкость анализа: Data Lake поддерживает различные аналитические инструменты и технологии, включая машинное обучение, аналитические платформы и SQL-запросы. Это позволяет аналитикам и разработчикам быстро адаптироваться к новым задачам и требованиям.
Поддержка масштабных данных: В эпоху больших данных возможность быстро масштабировать хранилище данных становится критически важной. Data Lake обеспечивает высокую масштабируемость без значительных затрат на инфраструктуру.
Быстрое внедрение инноваций: Возможность быстро интегрировать новые технологии и подходы к обработке данных делает Data Lake идеальным решением для компаний, стремящихся к инновациям.
Основные недостатки Data Lake:
Сложность управления: Без надлежащей структуры и управления Data Lake может превратиться в "болото данных" (data swamp), где трудно найти нужные данные.
Проблемы безопасности: Хранение большого объема данных в одном месте требует усиленных мер безопасности для защиты от утечек и несанкционированного доступа.
Требования к знаниям: Эффективное использование Data Lake требует знаний и опыта в управлении данными и аналитике, что может быть проблемой для компаний с ограниченными ресурсами.
Качество данных: Поскольку данные хранятся в их сыром виде, может возникнуть проблема с обеспечением их качества и консистентности.
———
В следующем посте расскажу, какие инструменты используются для управления Data Lake и как они помогают решать повседневные задачи.
#BigData #DataLake #Python #IT
👍6❤2🔥1
[Важность контроля доступа к разделяемым объектам]
Привет, друзья! Сегодня хочу поделиться интересным примером из книги "Операционные системы. Основы и принципы" Х. Дейтел. Этот пример демонстрирует важность контроля доступа к разделяемым объектам в параллельных потоках. Несоблюдение этого правила может привести к непредсказуемым результатам работы программы.
Код по ссылке: https://github.com/avagners/algorithms_and_data_structures/blob/main/algorithms/asynchronous_concurrent_execution/unsynchronized_buffer.py
Этот код создает два потока: производитель (Producer) и потребитель (Consumer), которые работают с общим ресурсом - буфером (Buffer). Производитель генерирует данные и добавляет их в буфер, а потребитель извлекает данные из буфера и суммирует их.
Ключевые моменты:
Buffer: Хранит данные в виде множества (set). Методы set и get используются для добавления и извлечения данных.
Producer: В цикле генерирует числа от 1 до 4, добавляет их в буфер и выводит сообщение о записи.
Consumer: В цикле извлекает числа из буфера, суммирует их и выводит сообщение о чтении.
Проблемы многопоточности
Каждый запуск этого кода будет выдавать непредсказуемый результат. Это происходит из-за того, что доступ к буферу не синхронизирован. Потоки могут одновременно пытаться читать и записывать данные, что приводит к ошибкам и некорректным результатам.
Важно помнить:
При работе с параллельными потоками необходимо тщательно контролировать доступ к разделяемым ресурсам. Это можно сделать с помощью механизмов синхронизации, таких как блокировки (lock), семафоры и другие средства.
В следующих постах я покажу и расскажу об алгоритмах взаимоисключений.
#Python #Multithreading #Concurrency #Programming #IT
Привет, друзья! Сегодня хочу поделиться интересным примером из книги "Операционные системы. Основы и принципы" Х. Дейтел. Этот пример демонстрирует важность контроля доступа к разделяемым объектам в параллельных потоках. Несоблюдение этого правила может привести к непредсказуемым результатам работы программы.
Код по ссылке: https://github.com/avagners/algorithms_and_data_structures/blob/main/algorithms/asynchronous_concurrent_execution/unsynchronized_buffer.py
Этот код создает два потока: производитель (Producer) и потребитель (Consumer), которые работают с общим ресурсом - буфером (Buffer). Производитель генерирует данные и добавляет их в буфер, а потребитель извлекает данные из буфера и суммирует их.
Ключевые моменты:
Buffer: Хранит данные в виде множества (set). Методы set и get используются для добавления и извлечения данных.
Producer: В цикле генерирует числа от 1 до 4, добавляет их в буфер и выводит сообщение о записи.
Consumer: В цикле извлекает числа из буфера, суммирует их и выводит сообщение о чтении.
Проблемы многопоточности
Каждый запуск этого кода будет выдавать непредсказуемый результат. Это происходит из-за того, что доступ к буферу не синхронизирован. Потоки могут одновременно пытаться читать и записывать данные, что приводит к ошибкам и некорректным результатам.
Важно помнить:
При работе с параллельными потоками необходимо тщательно контролировать доступ к разделяемым ресурсам. Это можно сделать с помощью механизмов синхронизации, таких как блокировки (lock), семафоры и другие средства.
В следующих постах я покажу и расскажу об алгоритмах взаимоисключений.
#Python #Multithreading #Concurrency #Programming #IT
👍4❤2
[Инструменты Data Lake]
Привет, друзья! Ранее мы обсудили, что такое Data Lake и почему он так популярен. Сегодня расскажу о том, какие инструменты мы используем для управления нашим Data Lake и как они помогают нам справляться с повседневными задачами.
Основные инструменты для управления Data Lake:
Apache Hadoop:
Hadoop — это одна из самых популярных платформ для работы с большими данными. Одним из ключевых компонентов является HDFS (Hadoop Distributed File System) для хранения данных. Hadoop обеспечивает высокую масштабируемость и отказоустойчивость, что делает его идеальным для Data Lake.
Apache Spark:
Spark — это мощный инструмент для обработки больших данных в режиме реального времени. Он поддерживает разнообразные аналитические задачи, включая машинное обучение, обработку потоков данных и SQL-запросы. Благодаря своей скорости и гибкости Spark стал незаменимым инструментом для анализа данных в Data Lake.
Apache NiFi:
NiFi — это мощный инструмент для автоматизации потоков данных. Он позволяет легко собирать, передавать и преобразовывать данные из различных источников в режиме реального времени. Мы используем NiFi для интеграции и управления потоками данных.
Apache Hive:
Hive — это инструмент для выполнения SQL-запросов на больших объемах данных, хранящихся в Hadoop. Он предоставляет интерфейс, похожий на SQL, что облегчает работу с данными для аналитиков и разработчиков. Hive позволяет выполнять сложные аналитические задачи и преобразования данных.
Trino (ранее PrestoSQL):
Trino — это распределенный SQL-движок, который позволяет выполнять высокопроизводительные аналитические запросы на больших объемах данных. Он поддерживает работу с различными источниками данных, включая Hadoop и S3. Trino обеспечивает быструю и эффективную обработку данных, что делает его незаменимым инструментом для нашего Data Lake.
Apache Airflow:
Airflow — это платформа для автоматизации и оркестрации рабочих процессов. Мы используем Airflow для планирования и мониторинга задач импорта/экспорта и обработки данных, что позволяет нам эффективно управлять интеграциями.
———
Далее я подробнее расскажу об экосистеме для работы с большими данными Hadoop. Оставайтесь на связи!
#BigData #DataLake #ApacheHadoop #ApacheSpark #ApacheNiFi #Hive #Trino #ApacheAirflow #IT
Привет, друзья! Ранее мы обсудили, что такое Data Lake и почему он так популярен. Сегодня расскажу о том, какие инструменты мы используем для управления нашим Data Lake и как они помогают нам справляться с повседневными задачами.
Основные инструменты для управления Data Lake:
Apache Hadoop:
Hadoop — это одна из самых популярных платформ для работы с большими данными. Одним из ключевых компонентов является HDFS (Hadoop Distributed File System) для хранения данных. Hadoop обеспечивает высокую масштабируемость и отказоустойчивость, что делает его идеальным для Data Lake.
Apache Spark:
Spark — это мощный инструмент для обработки больших данных в режиме реального времени. Он поддерживает разнообразные аналитические задачи, включая машинное обучение, обработку потоков данных и SQL-запросы. Благодаря своей скорости и гибкости Spark стал незаменимым инструментом для анализа данных в Data Lake.
Apache NiFi:
NiFi — это мощный инструмент для автоматизации потоков данных. Он позволяет легко собирать, передавать и преобразовывать данные из различных источников в режиме реального времени. Мы используем NiFi для интеграции и управления потоками данных.
Apache Hive:
Hive — это инструмент для выполнения SQL-запросов на больших объемах данных, хранящихся в Hadoop. Он предоставляет интерфейс, похожий на SQL, что облегчает работу с данными для аналитиков и разработчиков. Hive позволяет выполнять сложные аналитические задачи и преобразования данных.
Trino (ранее PrestoSQL):
Trino — это распределенный SQL-движок, который позволяет выполнять высокопроизводительные аналитические запросы на больших объемах данных. Он поддерживает работу с различными источниками данных, включая Hadoop и S3. Trino обеспечивает быструю и эффективную обработку данных, что делает его незаменимым инструментом для нашего Data Lake.
Apache Airflow:
Airflow — это платформа для автоматизации и оркестрации рабочих процессов. Мы используем Airflow для планирования и мониторинга задач импорта/экспорта и обработки данных, что позволяет нам эффективно управлять интеграциями.
———
Далее я подробнее расскажу об экосистеме для работы с большими данными Hadoop. Оставайтесь на связи!
#BigData #DataLake #ApacheHadoop #ApacheSpark #ApacheNiFi #Hive #Trino #ApacheAirflow #IT
👍8❤1