Николай Тузов
https://habr.com/ru/articles/888384/
Шучу, конечно. Антон Зиновьев не поверил в мою гипотезу по поводу количества тредов (которые, якобы, создаются заранее на всякий случай) и провёл целое расследование, которое лишило его сна
Скажу честно, я пока только мельком пробежался — выглядит интересно. Но полноценно смогу вникнуть чуть позже. В любом случае, у меня к Антону заранее большой кредит доверия, поэтому уже сейчас прошу вас поддержать его статью лайком, он очень старался.
————
p.s. Если уж интернет дискуссии, то только такие, пожалуйста — вежливо, этично, профессионально. Антону большое спасибо за то, что закрыл этот пробел в моём повествовании.
Please open Telegram to view this post
VIEW IN TELEGRAM
Хабр
What's in the box!? Исследуем минимальное количество тредов golang-программы
Именно с такой мыслью и именно с интонацией Брэда Питта я ушел спать вчера (сегодня) в 3:40 утра. После того, как в 23:10 "споткнулся" об утверждение Коли Тузова , о том, что рантайм голенга создает...
Николай Тузов
Пробовали поиграться с goschedviz? Удалось ли вам запустить?
(говорят, что не всегда работает, нужен фидбэк)
(говорят, что не всегда работает, нужен фидбэк)
Anonymous Poll
3%
Получилось, всё работает! ❤️
54%
Нет, даже не пробовал
1%
Пробовал, но у меня не работает на Mac OS X
2%
Пробовал, но у меня не работает на Linux
1%
Пробовал, но у меня не работает на Windows
3%
Хотел, но не разобрался как пользоваться 🤡
36%
Для меня вопрос не актуален / Посмотреть ответы
Пока я дорабатывал статью про планировщик, этот принцип столько раз напомнил о себе, что я решил посвятить ему отдельный пост. Для самых опытных из вас он стал уже привычным и очевидным, но если нет — важно прийти к его осознанию.
В проектировании любых систем не бывает бесплатных оптимизаций — это почти всегда трейдофы. Что это значит? Когда мы улучшаем одну характеристику системы, мы неизбежно жертвуем чем-то другим. Это как закон сохранения энергии, только для инженерных решений.
Вот вам несколько примеров:
1. CPU vs Память
- Оптимизируем работу CPU, кэшируя результаты в памяти → растёт потребление RAM
- Экономим память, перевычисляя значения вместо хранения → растёт нагрузка на CPU
2. Скорость vs Надёжность
- Ускоряем работу, убирая проверки и валидации → снижаем отказоустойчивость
- Повышаем надёжность через репликацию и различные проверки → замедляем систему
3. Латентность vs Пропускная способность
- Уменьшаем время ответа отдельного запроса → теряем в общем количестве обработанных запросов
- Оптимизируем для обработки большого числа запросов → отдельные запросы могут ждать дольше
4. Простота vs Гибкость — моё любимое
- Делаем систему максимально простой → теряем возможность подстраиваться под разные случаи
- Добавляем гибкие настройки и возможности → усложняем систему и её поддержку
5. Масштабируемость vs Сложность
- Проектируем систему для работы под большой нагрузкой → усложняем архитектуру
- Делаем архитектуру проще → ограничиваем возможности роста
Продолжать можно очень долго. Кстати, если посмотрите мои ролики про планировщик и про каналы, то в осбуждаемых там системах вы также увидите множество трейдофов. Да что там говорить, весь runtime Go, как и любая другая очень сложная система — это сплошное жонглирование решениями в попытках найти оптимальный баланс между разными крайностями. Не бывает просто "хороших" систем, это всегда вопрос приоритетов при принятии решений.
А знаете, что самое интересное? Часто серьёзные архитектурные проблемы возникают не из-за того, что инженеры не знают об этих трейдофах, а из-за того, что о них забывают. Мы часто оптимизируем систему в одном направлении, не задумываясь о цене, которую придётся заплатить. Признак хорошего специалиста — уметь в любой ситуации чётко видеть и трезво взвешивать все плюсы и минусы каждого решения — даже когда приходится отказаться от собственного "элегантного решения проблемы" (а часто это очень больно).
Попробуйте каждый раз задавать себе вопрос — "Что я теряю, добавляя это улучшение?". Если ответ "ничего" — скорее всего, вы что-то упускаете.
————
Полезные материалы:
- Статья Microservice Trade-Offs Мартина Фаулера
- Книга "Designing Data-Intensive Applications" (наш любимый "Кабанчик") — конечно же, там очень рассказано на эту тему
- CAP-теорема — классический пример трейдофа в распределённых системах. Если вы с ней не знакомы, поищите хорошие материалы и ознакомьтесь — поверьте, оно того стоит (кстати, давно думаю сделать о ней ролик и/или статью)
- Ну и классическое — No such thing as a free lunch
#guide
Please open Telegram to view this post
VIEW IN TELEGRAM
https://habr.com/ru/articles/891426/
Поверьте, эта статья — отдельный подвиг, на который я потратил огромное количество времени. Даже на то, чтобы в последний раз перечитать и навести финальные штрихи, ушло буквально пол дня.
Хотелось, чтобы всё получилось идеально — каждая формулировка, каждая картинка
А теперь ваша очередь — я очень надеюсь, что эта статья побьёт мой предыдущий рекорд по лайкам и просмотрам. У Хабра нет механизмов продвижения, кроме как рейтинг статьи, поэтому вы знаете как меня отблагодарить
Я не шучу, основная мотивация для написания такой статьи и публикация её в открытом доступе — она должна хорошо зайти на Хабре. Иначе усилия не будут оправданными.
————
Ну и да, можете считать эту статью пробой пера и демо-версией моей будущей книги. Можно сказать, это могла бы быть полноценная глава оттуда. Правда, в книге иллюстрации будут лучше прорабатываться иллюстратором.
Please open Telegram to view this post
VIEW IN TELEGRAM
Хабр
Планировщик Go — самый подробный гайд простым языком
Давайте спроектируем с нуля планировщик Go — начнём с самой простой и понятной наивной реализации, а затем шаг за шагом будем разбираться, какие изъяны в ней есть, и придумывать как их решать,...
Николай Тузов
Мы побеждаем, но сдаваться рано! Статья в топ-5, но она ещё не №1
И пока даже не побит рекорд предыдущей статьи🔨
И пока даже не побит рекорд предыдущей статьи
Please open Telegram to view this post
VIEW IN TELEGRAM
Николай Тузов
Мы побеждаем, но сдаваться рано! Статья в топ-5, но она ещё не №1 И пока даже не побит рекорд предыдущей статьи 🔨
Но это пока только рейтинг "за сутки". В рейтинге "за неделю" ставки уже выше. Так что, отдыхать пока рано!
В любом случае, всем спасибо за поддержку, усилия оправдались!
Please open Telegram to view this post
VIEW IN TELEGRAM
Николай Тузов
Думаю, ещё есть шансы попасть на 1-е место и навсегда остаться в истории, ведь прошло всего 3 дня из 30-ти (голосовать за посты можно только в течение 30 суток после публикации, после этого рейтинг фиксируется).
UPD: а вот и Топ-1 за неделю взят (по всем категориям)
Я, конечно, верил в неё, но не думал, что настолько хорошо зайдёт
Please open Telegram to view this post
VIEW IN TELEGRAM
Николай Тузов
😭 Sticker
А вы всё ещё не верите, что ИИ захватит мир?
Этот стикер — пара минут работы с новой фичей ChatGPT
🦄 А тут ещё немного поигрался, результаты просто огонь!
Этот стикер — пара минут работы с новой фичей ChatGPT
Please open Telegram to view this post
VIEW IN TELEGRAM
Николай Тузов
🐘 Sticker
Если кратко: на картинке изображён слон, безуспешно лепящий наследование из struct’ов и embedding'ов — когда нет ООП, но очень хочется
Это сюжет про людей, которые переходят в Go из PHP, но ещё не отвыкли от ООП и пытаются готовить Go как привыкли. Это абсолютно нормально, у меня самого путь был такой: <всякое разное> -> Java -> PHP, так что мне тоже было больно ломать в голове эти парадигмы, но оно того стоило.
А именно, картинка показывает случай, когда пытаются изобретать наследование, используя встраивание структур. Проблема в том, что наследования в Go нет, из-за чего при таком подходе вылезает куча проблем, с которыми сложно или даже невозможно бороться. Зато есть прекрасная композиция, которая тут постоянно используется.
Я и сам таким грешил в самом начале, и часто видел потом на код-ревью.
Конечно, со временем всё это выветривается и прививаются хорошие правильные подходы, но только при условии качественного код-ревью в команде. Иначе есть риск и дальше плодить "франкенштейнов".
Если хотите, я могу написать более подробный пост про "Композицию VS Наследование".
————
Сам я уже очень давно такое не встречал, т.к. редко пересекаюсь на работе с новичками, поэтому помню весьма смутно.
Please open Telegram to view this post
VIEW IN TELEGRAM
Николай Тузов
👷 Sticker
Эту надо объяснять? 😩
Please open Telegram to view this post
VIEW IN TELEGRAM
Forwarded from Гофер Фёдор
Please open Telegram to view this post
VIEW IN TELEGRAM
https://youtu.be/-cX0CqG6rgA
Два года назад я записал лучший свой ролик, который набрал незаслуженно мало просмотров. После этого мне написало множество подписчиков, которые благодаря этому видео получили повышения. Так чего же вы ждёте?
Please open Telegram to view this post
VIEW IN TELEGRAM
Please open Telegram to view this post
VIEW IN TELEGRAM
Николай Тузов
Please open Telegram to view this post
VIEW IN TELEGRAM