Вот я подумал, что миллисекунды абсолютно не соразмерны нашем привычным временным интервалам. По этому оптимизация под канкаренси находится в таком расплывчатом секторе внимания, ну что-то где-то как-то понятно.
Вот взять одну миллисекунду да 1 день, то секунда 3 года. RTT на 5000км (время сигнала туда и обратно) 56мск примерно 2 месяца, примерно 0.1 от 3х лет.
https://hpbn.co/primer-on-latency-and-bandwidth/#speed-of-light-and-propagation-latency
И вот с таким увеличением масштаба, можно понять, что если нам надо обслужить несколько подключений которые блокируют процесс на «месяцы» (десятки миллисекунд), а переключение контекста занимает «секунды» (сотни наносекунд) - то есть смысл подключать горутины.
Механизм Go планировщика G/P/M отрабатывает за «секунды» в рамках «месячных» блокировок, и по этому имеет смысл даже на 1 ядре.
Если растянуть секунду на три года.
То десятки миллисекунды - месяцы. Месяцы занимают IO операции.
Системные вызовы - минуты. 1-2 микросекуны.
Переключение горутин - секудны.
Ну а операции CPU - доли секун.
Вот в таком масштабе понятно цена микросекунд и наносекунд в работе компьютера. Если секунда 3 года, то запосы по сети месяца, а обработка запроса на месте минуты.
Теперь наложив на эту шкалу оценки Jakob Nielsen по быстродействию отклика, можно быстро ориентироваться в оптимизации приложения.
- https://www.nngroup.com/articles/website-response-times/
- https://www.nngroup.com/articles/response-times-3-important-limits/
🎆 «Мнемоника» от DeepSeek:
Дисковая операция (SSD): ~100 µs — в модели это 2.5 часа. Сетевой запрос (RTT 50 ms) : ~2 месяца.
🎆 «Мнемоника» от ChatGPT:
| Уровень | Операция | Реальность | В твоём масштабе |
|---|---|---|---|
| 🧠 CPU | инструкция | ~1 ns | ~0.1 секунды |
| 🧠 CPU | функция / аллокация | ~10–100 ns | ~1–10 секунд |
| 🧵 Go | переключение goroutine | ~100 ns | ~10 секунд |
| 🧵 Go | создание goroutine | ~300 ns | ~30 секунд |
| 📞 OS | syscall | ~1–2 µs | ~1–2 минуты |
| 🔄 OS | thread switch | ~3–5 µs | ~5–8 минут |
| 💾 I/O | SSD / сеть (локально) | ~10–100 µs | ~15–150 минут |
| 🌍 I/O | RTT (интернет) | ~50 ms | ~50 дней |
Это 4 пост, в цикле постов про ключевые моменты применения Golang:
- Интерфейсы в ООП
- Golang HTTP Middleware
- Архетипичный Golang
- Golang: секунда - «годы», сетевой запрос - «месяц», сменить горутину - «секуны»
Перемещено CrX из development







