Я не раз советовал прочитать статью от FastAPI про объяснение конкурентности, асинхронности и параллелизма
Но сейчас понял, что она писец как сильно вводит в заблуждение
Она буквально плохая и вредная
В ней почему-то противопоставляется параллелизм и асинхронность, хотя асинхронность должна противопоставляться мультитредингу.
Весь пример про бургеры, кассиров и банки не объясняет прелести асинхронности, ведь конкуретности можно добиться и на обыкновенных тредах (собственно так и было десятилетями)
У юного разработчика в принципе может сложиться впечатление, что если в FastAPI не использовать async, то весь код будет выполняться в одном потоке синхронно и без конкуретности и только 1 запрос может быть обрабатываться в моменте, что также совсем не так, лол
Но сейчас понял, что она писец как сильно вводит в заблуждение
Она буквально плохая и вредная
В ней почему-то противопоставляется параллелизм и асинхронность, хотя асинхронность должна противопоставляться мультитредингу.
Весь пример про бургеры, кассиров и банки не объясняет прелести асинхронности, ведь конкуретности можно добиться и на обыкновенных тредах (собственно так и было десятилетями)
У юного разработчика в принципе может сложиться впечатление, что если в FastAPI не использовать async, то весь код будет выполняться в одном потоке синхронно и без конкуретности и только 1 запрос может быть обрабатываться в моменте, что также совсем не так, лол
🔥2
Tea Overflow
Я не раз советовал прочитать статью от FastAPI про объяснение конкурентности, асинхронности и параллелизма Но сейчас понял, что она писец как сильно вводит в заблуждение Она буквально плохая и вредная В ней почему-то противопоставляется параллелизм и асинхронность…
Суть асинхронности (как в Python, так и в Go или Java, например) не в том, что она позволяет код запускать параллельно, это и потоки умеют.
Её прелесть в том, что корутины/горутины/лайттреды весят меньше обычных тредов и переключается в user space, что дешевле, чем переключение в kernel space
Грубо говоря в Python разница между asyncio и threading для обычного разраба только в:
- Перформансе (корутины легче и быстрее)
- Синтаксисе
- Экосистеме (нужны правильные библиотеки)
Все остальное тоже самое, и там и там можно IO-bound конкурентить
Её прелесть в том, что корутины/горутины/лайттреды весят меньше обычных тредов и переключается в user space, что дешевле, чем переключение в kernel space
Грубо говоря в Python разница между asyncio и threading для обычного разраба только в:
- Перформансе (корутины легче и быстрее)
- Синтаксисе
- Экосистеме (нужны правильные библиотеки)
Все остальное тоже самое, и там и там можно IO-bound конкурентить
❤2🔥1
В 1.27 Go, что выйдет в Августе этого года, наконец-то, добавят UUID в std библиотеку
По сути тот же github.com/google/uuid, но в std
А про JSON v2 новостей нет, иными словами не видать нам нормального парсинга времени в Go
По сути тот же github.com/google/uuid, но в std
А про JSON v2 новостей нет, иными словами не видать нам нормального парсинга времени в Go
❤2
Tea Overflow
Исходники с пустым телом ифа, конечно, мое подчение
Еще
Наверно?
Я хз, может есть какая-то потаеная причина
mutex берут на долго, хотя можно можно было бы только начиная с if его братьНаверно?
Я хз, может есть какая-то потаеная причина
🤔5
JSON V2 все-таки не умер и заедет в 1.27!!!!
А значит у нас появится тег
А значит у нас появится тег
inline, что уменьшит необходимость в встраивании и нормальное форматирование дат ура-ура-ураgo.dev
Go 1.27 Release Notes - The Go Programming Language
❤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 какой-то кринж и минус вайб
Например, раньше
Вылетает ошибка
??????
То есть, ВНИМАНИЕ, из GO убрали фичу чтобы стало хуже??? Зачем???????
И вот jsonv2 какой-то кринж и минус вайб
Например, раньше
time.Duration сериализовался в наносекунду, а теперь, в v2 версии...Вылетает ошибка
??????
То есть, ВНИМАНИЕ, из GO убрали фичу чтобы стало хуже??? Зачем???????
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.
Вот есть такая штука как Terraform, это что-то типа Helm/Ansible, но для облаков.
Ну так вот, через Terraform (CLI) можно написать манифест, который создаст вам VM, например, в AWS, YC, Google и других облаках. При этом у каждого облака свой "провайдер", то есть своя библиотечка, которая автоматически скачивается и реализует управление ресурсов.
Проблема заключается в том, что эта CLI написана на Golang, а в Go нет нормальных подключаемых библиотек, нельзя без рекомпиляции взять и подключить какую-то внешную зависимость и использовать ее, а без этого не возможно расширять terraform.
Что же сделали создатели Terraform? Каждый внешний подключаемый провайдер - это просто сторонний процесс, к которому основной процесс обращается по gRPC. То есть буквально, чтобы просто задеплоить сервак в AWSовский us-east-1 терраформ стартует основной процесс и дополнительный и общается между ними через, блин, gRPC.
❤1💯1
Оказывается еще в go 1.21 добавили PGO (profile guided optimizations), оптимизации на основании профайлера
По сути как в той же джаве из 2010 года, но с привкусом го.
Если в джаве код оптимизируется под нагрузкой прям в рантайме, то в го сделано все для людей:
- сначала нужно скомпилировать бинарь с включенным профайлером
- дать на него нагрузку
- выгрузить результаты
- рекомпилировать бинарник с подключенным профайлером
Для простого разработчика это жуть и муть, нужно либо иметь хорошие нагрузочные тесты, которые будут запускаться при каждом релизе, либо нужно очень извратиться с CI/CD и запускать профайлер на части подов, сгружать результаты, рекомпилировать и релизить
То есть один релиз всегда будет пораждать несколько деплоев
По сути как в той же джаве из 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. Если кандидат на них отвечает - повод насторожиться.
Моя новая статейка на хабре!!!
Представляю вам фан-подборку каверзных, глупых и душных вопросов по go. Если кандидат на них отвечает - повод насторожиться.
Моя новая статейка на хабре!!!
👍6😈3