LINUX.ORG.RU
ФорумTalks

Если из кода убрать sleep(), то он перестаёт так тормозить!

 , ,


0

3

Привет, ЛОР!

Сегодня в рубрике «Что там в GNOME?» очередное прекрасное.

Один перец решил замерить латентность в новом GNOME Console (переписанный и улучшенный GNOME Terminal) и выяснилось, что начиная с GNOME 46 он перестал так лагать, как лагал раньше. А всё потому что, и я цитирую:

The main change that caused this much improvement is likely this one by Christian that moves away from a 40 Hz VTE repaint timer to drawing every frame, synchronized with the monitor

Интересно, сколько ещё вызовов {u,}sleep() там раскидано по коду? На этом у меня всё.

Ссылка: https://bxt.rs/blog/just-how-much-faster-are-the-gnome-46-terminals/

★★★★★

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

49 лайков тут говорит о том что всё таки понадобилось.

49 лайков и ни одного пулл-реквеста. Значит не так сильно-то и понадобилось.

Я не уверен, что лигатуры можно нормально сделать без тормозов в отрисовке. Ведь по сути нужно держать буфер из последних N символов и при образовании в них лигатуры полностью сносить их из граф.буфера и перерисовывать заново, плюс двигать всё что после них. Дикая срань, короче.

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

Я не уверен, что лигатуры можно нормально сделать без тормозов в отрисовке. Ведь по сути нужно держать буфер из последних N символов и при образовании в них лигатуры полностью сносить их из граф.буфера и перерисовывать заново, плюс двигать всё что после них. Дикая срань, короче.

Ага. Автор сказал что нормально будет, если это под #ifdef или опцию в конфиге засунуть.

cumvillain
()
Ответ на: комментарий от WSL_user

Для alacritty сделали, но уже 3 года висит в draft, плюс в AUR есть форк с их поддержкой. Если для foot не сделали то это скорее показатель его непопулярности.

Возможно.

cumvillain
()
Ответ на: комментарий от WSL_user

Для alacrittyсделали, но уже 3 года висит в draft, плюс в AUR есть форк с их поддержкой. Если для foot не сделали то это скорее показатель его непопулярности.

Да нет, это показатель того, что нуждающиеся в лигатурах используют Alacritty. Или Konsole. Или GNOME. Или вообще сидят на маке.

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

Я бы не сказал что те ужасы веющие 2010 годом на маке как-то заменяют линукс терминалы. А вот windows terminal вполне приятен.

Лол это ты ещё терминалы на электроне с AI не видел.

https://hyper.is/

Вот что будет эталоном лагалища, так это вот этот хтонический ужас. Гнуму до такого срать и срать ещё!

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

xterm 1m16.919s

Дидовская иксопараша ожидаемо соснула, но апологеты этого якобы юниксвейного/KISS терминала всё ещё продолжают советовать неофитам на ЛОРе это иксовое недоподелие.

Любой Konsole или Yakuake будет не только в 100 раз функциональнее этого дидовско-иксового барахла, но и быстрее. Каким местом иксодеды писали код xterm что он получился ДАЖЕ МЕДЛЕННЕЕ GNOME Terminal – загадка.

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

разработчики гнома как всегда не понимают что нужно его пользователям.

Кстати вот интересно, есть ли пруфы, что разрабы гнома им пользуются на постоянной основе?

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

разработчики гнома как всегда не понимают что нужно его пользователям.

Кстати вот интересно, есть ли пруфы, что разрабы гнома им пользуются на постоянной основе?

Их там всего человек 10 и они все как один поехавшие наглухо. Так что, я прозреваю, что они им реально пользуются. Но они считают себя единственными пользователями, поэтому в их картине мира гнум удовлетворяет пользователей на 100%.

hateyoufeel ★★★★★
() автор топика

То есть теперь открытый терминал на 60 герцовом мониторе будет высаживать батарейку ноута в полтора раза быстрее? благодарю…

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

То есть теперь открытый терминал на 60 герцовом мониторе будет высаживать батарейку ноута в полтора раза быстрее? благодарю…

Нет, не будет, если только там нет полное перерисовки 60 раз в секунду.

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

Зачем, зачем, блин вам читать 1.5 миллиона строк? Ели мой терминал их за 10 минут выведет на экран, мне это никак не поможет. И даже если за 10 секунд или за час.

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

Зачем, зачем, блин вам читать 1.5 миллиона строк

Ну спроси у гномеров, зачем они это починили. На LOR этим недовольны!

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

Ограничить скорость работы ради ничего это не баг? А что это?

Не думаю, что эти ограничения были по ошибке созданы.

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

Зачем, зачем, блин вам читать 1.5 миллиона строк? Ели мой терминал их за 10 минут выведет на экран, мне это никак не поможет. И даже если за 10 секунд или за час.

Видимо, это для тех, кто пока ещё не знает про ^C.

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

Любой Konsole

Всратая хрень.

или Yakuake

Ещё более всратая хрень.

будет не только в 100 раз функциональнее

От терминала, в первую очередь, необходимо быть терминалом. Остальной функционал нафиг не нужон.

ЗЫЖ Если EXL не обосрал в сообщении иксы, значит это сообщение писал не он.

skiminok1986 ★★★★★
()

Вы извините, но тема напоминает собрание шизов.

Никому нахрен не надо в жизни выводить в терминал текст со скоростью 200 МБ/с.

Я повидал всякого говна в терминале, но уж в скорость работы вывода символов никогда не упирался. Особенно когда внутри этого терминала тормозит какая-нибудь срань на питоне.

Если бы они что-то оптимизировали в gtk, это была бы новость.

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

Никому нахрен не надо в жизни выводить в терминал текст со скоростью 200 МБ/с

Вот два чая. Если оно быстро работает это конечно круто, но делить на говно/не говно по этому критерию это уже утрата контакта с реальностью)

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

Программы, не? Исходники могут гигабайтами измерятся, а компилятор показывает только в какой строке ошибка, вот и приходится скроллить до нужной строки.

vbcnthfkmnth123 ★★★★★
()

в мануале для vt100

The screen does not hold its image after the electron beam has painted dots on it. For the eye to perceive it as continuously illuminated (i.e., without flickering) the screen must be repainted (refreshed) repeatedly some 30 or more times per second. Also, stray magnetic fields and electrical noise at the power line frequency can cause distortions in the display. If the refresh frequency is different from the power line frequency, the distortions appear to move up or down the display. This is very noticeable. Most distortions disappear by matching the refresh rate to the power line frequency. The VT100 can refresh at either of the two world power frequencies, 50 or 60 Hz, satisfying both flicker and distortion requirements. (VT100 refresh is not locked to the power line but is close enough to conceal most distortions.)

The CRT monitor, the monitor circuit board, and the flyback transformer are replaceable subunits of the VT100.

Думаю, ноги оттуда растут для 40Гц.

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

Нет, не растут. В мире нет стран с переменным током на 40Hz. А VTE появился когда ЭЛТ экраны уже отмирали.

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

Программы, не? Исходники могут гигабайтами измерятся, а компилятор показывает только в какой строке ошибка, вот и приходится скроллить до нужной строки.

Весь текст романа «Война и Мир» Толстого занимает меньше 10 мегабайт. Чувак, ты столько не скроллишь в год. Вообще, а не только в терминале.

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

Репозитарий винды весит около 300 гигабайт. Это чисто код. И как вы понимаете одной виндой мир не ограничивается, есть и другие подобные по размеру проекты.

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

Если в двух словах: кодовая база Windows состоит из 3.5 миллионов файлов; когда заливаешь ее на Git, получается репозиторий размером где-то в 300 гигабайт. Более того, в компании работает около 4000 инженеров; инженерная система ежедневно производит 1,760 сборок по 440 веткам, вдобавок к pull-запросам на валидацию билдов.

источник - https://habr.com/en/companies/productivity_inside/articles/329878/

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

когда заливаешь ее на Git, получается репозиторий размером где-то в 300 гигабайт

Это размер .git, то есть всей истории вообще, а не только текущего кода. И я не удивлюсь, если они туда пару тысяч бинарников на несколько метров каждый навалили и удалили.

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

приходится скроллить до нужной строки

У многих редакторов есть хоткей перехода на строку с номером, это гораздо более ненапряжно, чем скроллинг.

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

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

Если ты знаешь строчку кода :)

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

Ни слова про интеллект не сказал.

Тогда о чём сказал? Чем именно тебе не угодила русская глубинка? :)

skiminok1986 ★★★★★
()

Если из кода убрать sleep(), то он перестаёт так тормозить!

Если из кода убрать все ожидания, то он будет занимать 100% процессорного времени. Так что проблема не в sleep() как таковых, а в их длительности. Уменьшили длительность sleep() - уменьшили время реакции на ввод, и соответственно увеличили частоту перерисовки. Наверное аццким геймерам это важно, но сомнительно, что они в консоли играют.

А лично мне и 40мс выше крыши.

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

Если из кода убрать все ожидания, то он будет занимать 100% процессорного времени.

Нет, не будет. Уйди отсюда, ребёнок. Тут взрослые дяди погроммирования обсуждают.

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

Пропущу мимо ушей «ребёнка», не знаю, как на такое реагировать. Других возражений не вижу. Разве что можно уточнить, что 100% одного ядра в однопоточном случае.

Или я просто набрасывать помешал? Ты скажи прямо, я пойму.

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

Других возражений не вижу.

Потому что ты код не писал ни разу.

Разве что можно уточнить, что 100% одного ядра в однопоточном случае.

#include <stdio.h>

int main() {
  char c = 0;
  scanf("%c", &c);
  return 0;
}

Программа без sleep() которая наверняка сожрёт 100% одного ядра. Да-да, всё так.

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

О, чувствуется знаток. А при вызове scanf(), что, по-твоему будет делать эта программа? Я тебе скажу: она будет ожидать пользовательского ввода. То есть, эта программа не подходит под критерий «убрать все ожидания».

Ты повнимательней почитай моё исходное сообщение.

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

Ну то есть ты изобрёл свой собственный термин с одному тебе известным смыслом и теперь страдаешь, что тебя неправильно поняли. Типичненько.

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

Дружище, суть-то простая: в коде VTE заменили цикл вида

for (;;)
{
    sleep(40);
    redraw();
}

на что-то типа

for (;;)
{
    wait_vsync();
    redraw();
}

vsync случается чаще, чем раз в 40 мс, поэтому скорость отрисовки возросла. То есть, они не убрали sleep(), а заменили его на вызов другой функции ожидания события.

А вот если совсем убрать все ожидания, то есть сделать вот так:

for (;;)
{
    redraw();
}

, то скорость будет ещё больше, но жрать будет 100% цпу. Именно это я и высказал своим начальным сообщением. Но, похоже, набрасывать у тебя получается лучше, чем читать.

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

Думаю, ноги оттуда растут для 40Гц.

Тогда было бы 50 или 60. Я помню в далеких 90х делал отрисовку графика двигающегося. Так вот, я его рисовал по таймеру 40мс, чтобы получалось 25к\с.

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

А, вот из-за кого SPLUNK придумали и целый сириус бизнес на авгиевых логнюшнях подняли ... грепать только важное, а в логи не срать всяким ненужным спамом — это какая-то религия запрещает?

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

Короче, ты сам придумал и сам со своими голосами в голове споришь. Продолжай.

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

Да блин. Через 40Hz они пытались починить другой баг, но на самом деле это ограничение не чинило вообще ничего. Вот ссылка на коммит: https://gitlab.gnome.org/GNOME/vte/-/commit/c17d9c6b4571be0ab55c3818d9125233553bb7ee

там реверт реверта и авторы вообще похоже не очень понимают что делают.

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

гораздо плавнее чем

Это вы на тормоза так намекнули?

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

там реверт реверта и авторы вообще похоже не очень понимают что делают.

линукс на десктопе, он такой…

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

xterm 1m16.919s

Как начнешь выводить в xterm, сверни окно (минимизируй), и через пару секунд обратно разверни, и окажется что весь вывод уже завершен, а не эти ваши 1m16.919s

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