Igor Panasyuk | IGORoutine Programming
2.12K subscribers
112 photos
8 videos
75 links
Тимлид Яндекса, разрабатываю эквайринг, обеспечивающий обработку всех платежей компании. Доцент практики в ИТМО, веду несколько курсов, также преподаю в ШАД. Выступаю на конференциях, делюсь опытом в соцсетях и помогаю развитию Go-сообщества
Download Telegram
🙄🙄 Rust скоро заменит Go?

Недавно выступал на митапе от Вовы Балуна. Я был очень рад встретиться и пообщаться с подписчиками. Один из них (Денис) даже пришёл со значком igoroutine на груди) Если кто-то хотел пообщаться, но не смог прийти на митап, смело пишите мне в личные сообщения.

🔥 Из общения узнал, что в Ozon набирает обороты тренд переписывания инфраструктурных сервисов на Rust, я уже предвкушаю хайп про перекатку на Rust из Go, хотя бизнесовые сервисы вряд ли будут на него переписывать) На самом деле это ещё одна причина осознать то, что не стоит привязываться к языку программирования. Лучше понимать принципы, например, многопоточное программирование: оно и в Африке, и в Go, и в Java, и в Rust примерно одинаковое, ибо всё сводится к поддержке на аппаратном уровне, что выливается в схожие примитивы синхронизации. Именно такой контент я и стараюсь делать, рассказывая причины, а не внешние проявления языка.

🎤 К слову про многопоточное программирование, на самом митапе ко мне подошёл тимлид одной букмекерской компании, его зовут Дмитрий. Было очень интересно послушать про то, какая нагрузка и проблемы встречаются в приложениях такого рода, например, как быстро делать ставки у других букмейкеров, когда ты первее узнал событие на матче)) В том числе обсудили то, что при таких нагрузках решают даже паддинги и выравнивание в структурах, не говоря уже про сложные многопоточные алгоритмы.

📌 Как сказал Фил Карлтон:
«Есть только две сложные проблемы - инвалидация кэша и придумывание названий переменных»

📌 В последнее время его начали дополнять:
«Но самое трудное это многопоточное программирование. Как только вы начинаете думать о параллельных процессах, вы оказываетесь в мире, где интуиция почти всегда подводит»

⚙️ На самом митапе я выступал с докладом про устройство атомиков в Go, на докладе с нуля прошёлся от машинных инструкций (прям открывал мануал от Apple) до самописного мьютекса и модели памяти. После доклада подходили люди, один человек даже сходу записался на мой курс про многопоточное программирование.

🎓 Доклад с митапа я скоро выложу в панель управления каналом + там уже лежат записи всех моих докладов. Кстати, как и обещал, скоро на канале выйдут видео-лекции из ИТМО, более того, я уже выложил два новых видео про низкоуровневое устройство памяти. В будущем планирую полностью пройтись по темам микросервисов и проектирования распределенных систем.


🙂 ПАНЕЛЬ УПРАВЛЕНИЯ 🙂
Please open Telegram to view this post
VIEW IN TELEGRAM
42818🔥10👍31
😳😳 Иногда кажется, что в канале иногда стоит делиться ещё и развлекательными вещами, чтобы поднимать настроение) Попробую, ловите пятиминутную запись с конференции ClosureConf 2017, всем хорошего дня

Кстати, на канале вышел новый ролик про память:
▶️ YouTube
📱 VK Видео
⚫️ Дзен
🟣 Rutube

🙂 ПАНЕЛЬ УПРАВЛЕНИЯ 🙂
Please open Telegram to view this post
VIEW IN TELEGRAM
313😍3🤣3😁2
▶️ В комментариях под этим постом будут храниться исходники к видео (ссылки на код, материалы)

(ссылка на этот пост будет в панели управления)

🙂 ПАНЕЛЬ УПРАВЛЕНИЯ 🙂
Please open Telegram to view this post
VIEW IN TELEGRAM
69🥰4🔥21
🙄🙄 Как и обещал, начал выкладывать свои лекции из ИТМО! Первое видео посвящено продвинутой базе по Go, что такое GOROOT, GOPATH, почему пустая структура весит 0 байт, какие есть типы, языковые нюансы и многое другое вы найдёте в новом видео. Все темы рассмотрены как с точки зрения жизни, так и с точки зрения стандарта языка.

🙂 Видео будет полезно как тем, кто уже пишет на Go, так и тем, кто хочет начать на нём писать или недавно перешёл. Приятного просмотра!

▶️ YouTube
📱 VK Видео
⚫️ Дзен
🟣 Rutube

🙂 ПАНЕЛЬ УПРАВЛЕНИЯ 🙂
Please open Telegram to view this post
VIEW IN TELEGRAM
12🔥5620102😎2
😎😎 Go убил меня?

Так могли бы сказать противники языка после того, как я не выкладывал посты 2 недели)) На самом деле нас уже больше 1_000 человек в Telegram, я вас люблю ❤️‍🔥, благодарен каждому за поддержку, в честь этого скоро будет большой конкурс.

😳😳 Помимо этого, у меня для вас есть новости. В начале ноября я буду в Москве выступать на двух конференциях. Сперва на Go субботнике от Яндекса расскажу про новый сборщик мусора, а затем - на HighLoad++ расскажу про проект, которым занимаюсь в Яндексе. Если кто-то сможет прийти очно, обязательно пишите и зовите друзей, сможем увидеться + смогу подарить мерч)

🙂 Осознаю, что не у всех есть возможность посещать такие мероприятия, поэтому периодически выкладываю на канал видео, кстати, как раз недавно вышел материал про продвинутые дженерики в Go как продолжение моего курса в ИТМО.

Я много размышлял о том, насколько мой контент помогает людям, ведь я не просто рассказываю про синтаксис Go, а раскрываю принципы, на которых строится дизайн всех языков и технологий. И вот совсем недавно ко мне подошли два студента, которые проходили мой курс в ИТМО. Они рассказали, что оба прошли на стажировку, после которой их взяли на мидловый грейд, после таких моментов сразу хочется делать ещё больше контента.

И вот как раз для людей, которые уже работают и хотят вырасти, я готовлю несколько уникальных продуктов, которые скоро будут анонсированы. Вы можете спросить меня, а откуда я знаю, что нужно людям? На самом деле - это хороший вопрос, ответ на который я получаю, когда провожу 1-1 и Q/A сессии на своих курсах.

Так, недавно закончился мой курс The Nature of Concurrency, новый поток начнётся через месяц, места уже разбирают. Меня порадовало, что не было ни одного негативного отзыва, всем понравилось + были очень полезные конструктивные предложения по улучшению, кто-то уже успел применить знания на практике, отзывы есть на сайте. Ну и под конец всем участникам я подарил свой мерч))

Последнее, что хочу сказать, под каждым постом есть ссылка на панель управления. В ней очень много полезного, например, ссылки на исходной код ко всем видео и другие материалы. Говорю об этом, ибо часто спрашивают про материалы в личных сообщениях 🙄🙄

🙂 ПАНЕЛЬ УПРАВЛЕНИЯ 🙂
Please open Telegram to view this post
VIEW IN TELEGRAM
1524🔥66😁5
🙄🙄 Задача на Senior Go в Ozon

Логическое продолжение предыдущего видео о продвинутых дженериках в Go. Сама задача есть на литкоде, её давали в Ozon как алгоритмическую. В видео показана более усложнённая версия с итераторами и дженериками. Приятного просмотра!

▶️ YouTube
📱 VK Видео
⚫️ Дзен
🟣 Rutube

🙂 ПАНЕЛЬ УПРАВЛЕНИЯ 🙂
Please open Telegram to view this post
VIEW IN TELEGRAM
91811🔥8🤩1
This media is not supported in your browser
VIEW IN TELEGRAM
9975🔥2
😱😱😱Разработчики из Google чуть не сорвали мой доклад?

Я уже собирался выезжать на Go субботник Яндекса и внезапно понял, что позавчера разработчики языка выложили статью про новый сборщик мусора, на эту тему у меня как раз завтра доклад 💔

Что делать, сейчас в поезде дочитываю эту статью и буду добавлять материал в презентацию, там есть очень интересная статистика, которую хочется осветить. Вообще, хороший урок, который показывает, что в жизни не всегда всё идет по плану.

В самой статье упоминаются векторные инструкции (AVX-512), NUMA архитектура, локальность кэша, виртуальная память и concurrency. В крайних видео я как раз освещал именно эти темы. В такие моменты на душе становится приятно))

Конечно, понятно, что в современном мире чаще пригождаются более высокоуровневые навыки - то же проектирование сервисов, системный дизайн или какие-нибудь софтскиллы. Поверьте, всё будет)

❤️Пока выложил полноценный гайд про операционные системы. Конечно, сложно за полтора часа вместить многое про оси, постарался осветить самые практические вещи, с которыми чаще встречаются. Желаю приятного просмотра тем, кто ещё не смотрел))

👍👍 Кстати, про Яндекс, если вдруг кто-то хочет сменить работу, рекомендую посмотреть в сторону Yandex Weekend Offer'a. Я лично проектировал одну из двух задач алгоритмического контеста, в этом году была главная цель, чтобы их не мог решить ChatGPT-5))) Если кто-то сможет решить, обязательно пишите о своих ощущениях)

🫡🫡А если кто-то хочет разобраться в многопоточном программировании, чтобы спокойно осознавать статьи про сборщик мусора или лучше выполнять рабочие задачи, напоминаю, что через месяц стартует мой курс The Nature of Concurrency ❤️


🙂 ПАНЕЛЬ УПРАВЛЕНИЯ 🙂
Please open Telegram to view this post
VIEW IN TELEGRAM
1619🔥1510❤‍🔥11
This media is not supported in your browser
VIEW IN TELEGRAM
111510642
Пообещал выложить в канал))
1126🔥11964
Forwarded from Igoroutine Speech
00:00 Канал Igoroutine Speech, зачем он появился
02:15 Нейросети, правда ли, что нейросети всех заменят
03:50 Правда ли, что наличие доступа к информации даёт преимущество?
07:00 Есть ли смысл учиться что-то, если скоро AI всех заменит?
10:20 Что спрашивают на собеседованиях про AI
11:55 Что будет, если заменят программистов?
14:25 AI усиляет высокую компетентность и ослабляет низкую
17:50 Самая выигрышная стратегия с нейросетями
19:20 Базовые принципы позволяют быстрее осозновать факты c помощью AI

@igoroutine_speech
1624🔥1872💊1
Forwarded from igoroutine.courses
Во сколько раз многопоточная реализация сложения матриц 4096 x 1024, распараллеливающая вычисления по строкам на 10 ядрах, быстрее однопоточной реализации?

(90 % кода распараллелено)
Anonymous Quiz
19%
В 3 раза
20%
В 5 раз
13%
В 7 раз
14%
В 9 раз
34%
В 10 раз
79😨72
Forwarded from igoroutine.courses
🙄🙄 Есть ли смысл в CPU-bound сoncurrency?

Мы все видели таких коллег 😎😎 — только что изучили горутины, и сразу решили «распараллелить всё!» Особенно так любят делать новички:

«Оо, я недавно изучил пакет unsafe и concurrency, сейчас распараллелю вычисления в этом запросе и уберу лишние копии».

В лучшем случае код становится менее читаемым.
В худшем — станет медленнее 🫡🫡

Как однажды сказал Дональд Кнут — один из отцов информатики:

«Преждевременная оптимизация — корень всех зол»

Особенно наглядно это работает для CPU-bound задач — например, сложение матриц, хэширование, кодирование. Интуитивно кажется, что «больше горутин = быстрее», но это ловушка.

Закон Амдала отлично иллюстрирует, насколько сложно получить ускорение в этом случае. Например, при 60% параллельного кода разницы между 100 и 1000 ядрами практически нет 💔. В задаче из поста выше ответ по формуле 5.263.

С точки зрения практики, всегда лучше сделать бенчмарк. Как видим, ответ почти сошёлся.


BenchmarkAdd/par/w=1-12 168
BenchmarkAdd/par/w=10-12 776


При этом важно понимать, что с IO-bound задачами всё иначе — там другие принципы и прирост может быть на порядки выше.

Кстати, как раз сегодня на канале вышло видео про устройство атомиков и распараллеливание CPU-bound задач.

Если же хочется разобраться в этих принципах глубже, 25 ноября стартует 2 поток курса The Nature of Concurrency. Это системное погружение в базу многопоточности: от устройства атомиков, мьютексов до модели памяти, устройства race detector'a и lock-free алгоритмов.

Курс закрывает 100% вопросов про Concurrency на собеседованиях, видеоотзывы можно посмотреть на сайте. В честь распродажи 11.11 до конца недели действует скидка на PREMIUM тариф, на нём есть возможность поработать со мной 1 на 1, осталось всего 2 места.
Please open Telegram to view this post
VIEW IN TELEGRAM
Please open Telegram to view this post
VIEW IN TELEGRAM
71886👍3👎1
Forwarded from igoroutine.courses
🍀 Время это иллюзия?

🙄🙄 Что же такое время? Мы часто оперируем этим понятием в наших приложениях, но откуда вообще наш компьютер знает точное время?

Всё началось ещё давно, когда морякам необходимо было знать точное время, чтобы определить точное местоположение корабля в океане. Это связано с принципом долготы — одной из двух координат на Земле. В 1731 году изобрели хронометр, который надолго стал золотым стандартом на море. В современном мире используют спутниковые системы (GPS).

Но как же наши компьютеры понимают, сколько сейчас время? В каждом компьютере есть маленький чип — Real-Time Clock (RTC). Он работает даже тогда, когда устройство выключено. Но есть проблема в том, что RTC не очень точный, за минуту дрейф может составлять миллисекунды, а за дни и недели — уже секунды и больше.

Для решения этой проблемы был придуман Network Time Protocol (NTP). Операционная система почти всегда периодически синхронизирует время через интернет. Но откуда те, с кем мы синхронизируемся, знают точное время, как они его считают?

Существует международное атомное время (TAI - International Atomic Time). Оно равняется средневзвешенному времени цезиевых часов из разных лабораторий, с поправками на локальную разницу гравитации. Через GPS атомные часы калибруются по отдельности через положение GPS-спутников. Сами атомные часы завязаны на факт, что одна секунда равна времени, за которое атом цезия-133 совершает 9_192_631_770 переходов между энергетическими состояниями, там всё неочевидно, оставим эти вопросы физикам)

Но где же здесь всем знакомый UTC (Coordinated Universal Time)? На самом деле UTC — это шкала, которая идёт почти как TAI, но периодически в неё вставляют високосные секунды, чтобы не убегать от астрономического времени. Поскольку Земля со временем вращается медленнее, «солнечные сутки» постепенно расходятся с атомным временем. Поэтому международная служба времени (каких служб только не придумают) вставляет лишнюю секунду, чтобы синхронизировать шкалы. Таким образом, можно было увидеть время:

23:59:60 <- вставленная секунда 😎😎

Так делали 27 раз, начиная с 1972 года. Високосная секунда кажется мелочью — всего одна лишняя секунда. Но на практике 30 июня 2012 года она вызвала крупные сбои по всему миру: в интернете, авиакомпаниях, дата-центрах, базах данных, Linux-серверах и даже в платежных системах. В частности, в ядре Linux был баг в обработке таймеров, и при вставке секунды некоторые таймеры начинали бесконечно перезапускаться, загружая CPU на 100%.

Эта секунда так всех достала, что в ноябре 2022 года на 27-й Генеральной конференции по мерам и весам было принято решение отказаться от дополнительных секунд к 2035 году или ранее))

Но как всё-таки получать точное время? Ведь даже при использовании NTP нет жёсткой гарантии на дрейф, ибо всё зависит от множества факторов (аппаратные часы, сеть, серверы) В нормальных условиях речь обычно идёт о миллисекундах, иногда десятках миллисекунд, но это всё равно слишком много, чтобы на это завязаться.

В рамках одного процесса ОС эту проблему решают монотонными часами. Например, в Go пакет time хранит такое время от операционной системы. В отличие от "реального" времени оно монотонно, то есть можно более безопасно реализовать различные таймеры.

Но что делать, если нам нужно точное время между разными компьютерами? Например, базам данных критично получать точное время для выбора меток при реализации распределённых транзакций с уровнем изоляции snapshot isolation (MVCC).

Эту проблему решают специальными чипами с атомными часами, например, Chip-Scale Atomic Clock (CSAC), который можно купить за +- 5.000$. Далее такую аппаратную поддержку используют в time server'ах, с помощью которых приложение может получить "интервал доверия" для текущего времени — диапазон, в котором оно почти наверняка находится. Сами серверы бывают разные (master, slave), соответственно, с разной точностью.

Подводя итоги, можно сказать одно. Прежде чем сильно завязаться на время в вашей системе, подумайте несколько раз, правда ли вы этого хотите 🖐️🖐️
Please open Telegram to view this post
VIEW IN TELEGRAM
Please open Telegram to view this post
VIEW IN TELEGRAM
4😱1614👍99