Tea Overflow
160 subscribers
54 photos
20 links
Всякое интересное программерское

По всем вопросам: @teadove
Дискас: https://t.me/+rScI0Go6lsZlMTQy
Download Telegram
Я не раз советовал прочитать статью от FastAPI про объяснение конкурентности, асинхронности и параллелизма
Но сейчас понял, что она писец как сильно вводит в заблуждение
Она буквально плохая и вредная

В ней почему-то противопоставляется параллелизм и асинхронность, хотя асинхронность должна противопоставляться мультитредингу.
Весь пример про бургеры, кассиров и банки не объясняет прелести асинхронности, ведь конкуретности можно добиться и на обыкновенных тредах (собственно так и было десятилетями)

У юного разработчика в принципе может сложиться впечатление, что если в FastAPI не использовать async, то весь код будет выполняться в одном потоке синхронно и без конкуретности и только 1 запрос может быть обрабатываться в моменте, что также совсем не так, лол
🔥2
Tea Overflow
Я не раз советовал прочитать статью от FastAPI про объяснение конкурентности, асинхронности и параллелизма Но сейчас понял, что она писец как сильно вводит в заблуждение Она буквально плохая и вредная В ней почему-то противопоставляется параллелизм и асинхронность…
Суть асинхронности (как в Python, так и в Go или Java, например) не в том, что она позволяет код запускать параллельно, это и потоки умеют.

Её прелесть в том, что корутины/горутины/лайттреды весят меньше обычных тредов и переключается в user space, что дешевле, чем переключение в kernel space

Грубо говоря в Python разница между asyncio и threading для обычного разраба только в:
- Перформансе (корутины легче и быстрее)
- Синтаксисе
- Экосистеме (нужны правильные библиотеки)
Все остальное тоже самое, и там и там можно IO-bound конкурентить
❤2🔥1
Подался я значит на технотекст 8 от хабра, прошел в финал и теперь конкурирую с этим страхов.....
1❤4🔥3😁2
В 1.27 Go, что выйдет в Августе этого года, наконец-то, добавят UUID в std библиотеку

По сути тот же github.com/google/uuid, но в std

А про JSON v2 новостей нет, иными словами не видать нам нормального парсинга времени в Go
❤2
Tea Overflow
Исходники с пустым телом ифа, конечно, мое подчение
Еще mutex берут на долго, хотя можно можно было бы только начиная с if его брать
Наверно?

Я хз, может есть какая-то потаеная причина
🤔5
Эх, хорошая библиотека была, как жалко что завязалась на мертворожденный jsonv2 :(
😭1
JSON V2 все-таки не умер и заедет в 1.27!!!!
А значит у нас появится тег inline, что уменьшит необходимость в встраивании и нормальное форматирование дат ура-ура-ура
❤2
Нифигасе правительство Нигерии кайфует
👌2
Хотите непонятность покажу, смотрите:


package main

import "fmt"

func main() {
loop:
for i := range 10 {
for j := range 10 {
fmt.Printf("%d - %d\n", i, j)
break loop
}
}
}

Вопрос, а что тут выведется?
Вышел go 1.27 c uuid, jsonv2 и другими финтифлюшками.
И вот jsonv2 какой-то кринж и минус вайб

Например, раньше time.Duration сериализовался в наносекунду, а теперь, в v2 версии...
Вылетает ошибка
??????

То есть, ВНИМАНИЕ, из GO убрали фичу чтобы стало хуже??? Зачем???????
Не хотя бы embed и другие фичи реализовали, теперь причин встраивать структуру еще меньше :)
Tea Overflow
нормальное форматирование дат ура-ура-ура
СУКАААА НЕ ПОЯВИТСЯ

Тег format не завезли, форматирования дат до сих пор нет, твари
😁3🌭2
Познаем гениальности Golang #228

Вот есть такая штука как Terraform, это что-то типа Helm/Ansible, но для облаков.
Если быть точнее, что это декларативный Infrastructure as Code на собственном языке HCL

Ну так вот, через Terraform (CLI) можно написать манифест, который создаст вам VM, например, в AWS, YC, Google и других облаках. При этом у каждого облака свой "провайдер", то есть своя библиотечка, которая автоматически скачивается и реализует управление ресурсов.
Проблема заключается в том, что эта CLI написана на Golang, а в Go нет нормальных подключаемых библиотек, нельзя без рекомпиляции взять и подключить какую-то внешную зависимость и использовать ее, а без этого не возможно расширять terraform.

Что же сделали создатели Terraform? Каждый внешний подключаемый провайдер - это просто сторонний процесс, к которому основной процесс обращается по gRPC. То есть буквально, чтобы просто задеплоить сервак в AWSовский us-east-1 терраформ стартует основной процесс и дополнительный и общается между ними через, блин, gRPC.
❤1💯1
Клод моей женщины решил, почему-то, что она - она 💅💅💅
🤯3❤1👍1👀1
Оказывается еще в go 1.21 добавили PGO (profile guided optimizations), оптимизации на основании профайлера
По сути как в той же джаве из 2010 года, но с привкусом го.
Если в джаве код оптимизируется под нагрузкой прям в рантайме, то в го сделано все для людей:
- сначала нужно скомпилировать бинарь с включенным профайлером
- дать на него нагрузку
- выгрузить результаты
- рекомпилировать бинарник с подключенным профайлером

Для простого разработчика это жуть и муть, нужно либо иметь хорошие нагрузочные тесты, которые будут запускаться при каждом релизе, либо нужно очень извратиться с CI/CD и запускать профайлер на части подов, сгружать результаты, рекомпилировать и релизить
То есть один релиз всегда будет пораждать несколько деплоев
🫡3😱1
Tea Overflow
Оказывается еще в go 1.21 добавили PGO (profile guided optimizations), оптимизации на основании профайлера По сути как в той же джаве из 2010 года, но с привкусом го. Если в джаве код оптимизируется под нагрузкой прям в рантайме, то в го сделано все для…
Благо хотя бы если просто рядом с main.go положить результат профилирования default.pgo, то go run/build автоматически его подтянет. Да и сам default.pgo весит не супер много, меньше МБ, поэтому его можно класть в git
🤩1
К вам пришёл кандидат, который идеально проходит по всем критериям, но вам нравится давать необоснованные отказы? Или вам надоели AI-суфлеры от волков, поэтому вам нужна детекция кандидатов жуликов?

Представляю вам фан-подборку каверзных, глупых и душных вопросов по go. Если кандидат на них отвечает - повод насторожиться.

Моя новая статейка на хабре!!!
👍6😈3