LINUX.ORG.RU
ФорумTalks

Golang: секунда - «годы», сетевой запрос - «месяц», сменить горутину - «секуны»

 , , ,


0

4

Вот я подумал, что миллисекунды абсолютно не соразмерны нашем привычным временным интервалам. По этому оптимизация под канкаренси находится в таком расплывчатом секторе внимания, ну что-то где-то как-то понятно.

Вот взять одну миллисекунду да 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 по быстродействию отклика, можно быстро ориентироваться в оптимизации приложения.

🎆 «Мнемоника» от 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 секунд
📞 OSsyscall~1–2 µs~1–2 минуты
🔄 OSthread switch~3–5 µs~5–8 минут
💾 I/OSSD / сеть (локально)~10–100 µs~15–150 минут
🌍 I/ORTT (интернет)~50 ms~50 дней

Это 4 пост, в цикле постов про ключевые моменты применения Golang:

Перемещено CrX из development



Последнее исправление: lbvf50txt (всего исправлений: 1)

Смысл понятен, но - отсыпь, а?

James_Holden ★★★★★
()

Напомнило

. . . Man can perceive the length of one foot directly; he cannot perceive ten miles. By establishing the relationship of feet to miles, he can grasp and know any distance on earth; by establishing the relationship of miles to light-years, he can know the distances of galaxies.

Или моя аналогия: человек может познать размер галактики через единицу своего роста как отправную точку, но не свой рост через единицу размера галактики как отправную точку.

kaldeon ★☆
()
Последнее исправление: kaldeon (всего исправлений: 2)

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

kaldeon ★☆
()

GPT-5 mini
«Assume you mean gravitational time dilation from increasing Earth's mass so that a proper time interval of 1 ns at Earth's surface corresponds to 0.1 s
...
Thus ΔM ≈ 4.29×10^33 kg ≈ 2.2×10^3 solar masses. Conclusion: you'd need to make Earth essentially a black-hole-scale mass (Schwarzschild radius ≈ Earth's radius).»

ratvier ★★
()

Помню, как когда-то в /development увлеченно наблюдал за разжижением мозга одного жаваскриптера. Но его хоть банили периодически.

thesis ★★★★★
()

горутины это про утилизацию ресурсов и общий throughput а не про скорость обработки конкретного чего-то там. И отчасти на вкус и цвет «удобно/привычно формулировать решения именно так»

Поэтому всё что автор с ИИ накатал в топике не имеет смысла.

MKuznetsov ★★★★★
()
Ответ на: комментарий от thesis

Джава скрипт гениален тем, что в него низкий порог вхождения.

Когда-то в универе один из наших преподов вёл лабы по «Программирование на ЯВУ», применяя JS для решения лаб. Тогда я тоже думал, как некоторые из здесь присутствующих, что изучение практического программирования должно начинаться с ассемблера и базовых концепций цифрового железа. А потом я просто понял, что препод решал практическую проблему организации лаб: без траходрома с настройкой и администрированием *nix в компьютерном классе. Без траходрома с пиратками Дельфи и ВижлС++. Без необходимости запускать скрипты в консольке или выбирать из бесплатных (недо-)IDE для питона что-то удобоваримое.

seiken ★★★★★
()
Последнее исправление: seiken (всего исправлений: 1)
Ответ на: комментарий от seiken

Да все большие молодцы, упрощают себе жизнь и не запариваются.

Только вот жизнь удивительным образом не становится легче, а уровень говна растет катастрофически.

thesis ★★★★★
()
Ответ на: комментарий от Lusine

Я всё еще не могу перестать ржать.

сменить горутину - «секуны»

wandrien ★★★
()
АСТРАЛЬНЫЙ ВИНЧУНЬ ПРОИГРАЛ
ТУПНЯК ОКАЗАЛСЯ СЛАБЕЙ
ПРИДЕТСЯ НА МЕСЯЦ ЗАЛЕЗТЬ В МОРОЗИЛЬНИК

О-ООООО МОЯ ГОРУТИНА
БЫСТРЫЙ ПОТОК КОНКУРЕНТНЫХ ЭТАПОВ
thesis ★★★★★
()

создание goroutine

тут ещё не хватает там запись/чтение атомик
захват/освобождение мутекс
создание/чтение/запись в канал

Bad_ptr ★★★★★
()
Последнее исправление: Bad_ptr (всего исправлений: 1)
Ответ на: комментарий от seiken

Так-то курс по программированию можно заметить на любом Шелл(и даже bat|cmd ) реальный вопрос насколько обучаемая бублика может в косвенно что ибо даже если входной язык симулятора строчный «ассембли» всегда можно затулить препроцессоров цепь для любого входного языка - ну да тут вылазит проблема онлайн отладки но при какое многопоточнопроцессности лучше к ней и не привыкать

Js хорош ибо любой браузер тебе засекает но имхо петухонша победила сим

qulinxao3 ★☆
()
Ответ на: комментарий от qulinxao3

Так-то курс по программированию можно заметить на любом Шелл(и даже bat|cmd )

нет. Шеллы слишком сильно заточены на задачи автоматизации административных и околоадминистративных задач. Поэтому и шелл, и bat код выглядят как переусложнённое УГ для лаб. А на лабах там требудется простые алгоритмы показать: решето Эратосфена, сортировка и проч. Чтобы не было никаких лишних закорючек в синтаксисе. В этом плане, кстате, перл тоже - антипаттерн, методически тяжелый ЯП. ТурбоПаскаль был просто идеален в этом плане. Потому что ещё ООП было, плюс 2д графика из коробки. Но потом пришли эти новые вИнды (или быстрые процы), на которых ТрурбоПаскаль надо было искусственно замедлять, чтобы не падал на старте…

seiken ★★★★★
()
Последнее исправление: seiken (всего исправлений: 2)
Ответ на: комментарий от qulinxao3

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

Но когда мы десятилетиями упрощаем жизнь, но не облегчаем ее, то есть продолжаем шлепать формы с 9 до 17 - это совсем не то же , что было раньше. Это значит, что лошадь теперь мы сами.

Посмотри на нас. Наш род мельчает. Если это продолжится, нас будут забивать ради мяса.

thesis ★★★★★
()

Уровень Операция Реальность

Go: переключение goroutine: ~100 ns;

OS: thread switch: ~3–5 µs.

Подвох сопрограмм заключается в том, что если в одной из них что-либо «заклинит», то все остальные сопрограммы «заклинит» тоже, ибо исполняются они все в одном потоке операционной системы. Одна внезапная ошибка остановит все сопрограммы разом.

Enthusiast ★★★★
()
Ответ на: комментарий от Enthusiast

А во всяких Nginx/Netty/Шметти вообще переключения (даже userspace) контекста может не быть.

Подвох сопрограмм заключается в том, что если в одной из них что-либо «заклинит», то все остальные сопрограммы «заклинит» тоже, ибо исполняются они все в одном потоке операционной системы. Одна внезапная ошибка остановит все сопрограммы разом.

Ошибка в рантайме Го да, в пользовательском коде — нет.

urxvt ★★★★★
()
Закрыто добавление комментариев для недавно зарегистрированных пользователей (со score < 50)