Каковы различия между мультиплексированием с использованием tmux / screen и открытием вкладок в эмуляторе терминала?

601
abdelmak

Я пытаюсь сравнить эти два метода запуска нескольких оболочек / процессов путем измерения использования памяти и процессора через htop.

Может кто-нибудь объяснить различия в том, как функционирует каждый метод, или если они есть?

РЕДАКТИРОВАТЬ:

Из того, что я понимаю сейчас, tmux / screen и другие мультиплексоры - это виртуальные сессии, то есть несколько виртуальных сессий в исходной сессии. Это в отличие от открытия новых вкладок в терминале, которые фактически создают новые сессии.

Я до сих пор не определил, есть ли преимущества производительности одного метода над другим; ни основные механизмы, участвующие.

В то же время, не стесняйтесь вносить более подробные знания по этой теме!

Эти ссылки ниже помогли мне понять основные различия:

Какая связь между мультиплексором и терминалом?

Каковы преимущества использования терминального мультиплексора

1

2 ответа на вопрос

1
grawity

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

Основное отличие состоит в том, что мультиплексоры действуют как «прокси» - они действуют как эмуляторы терминала для программы внутри, но как обычные программы (клиенты) для эмулятора основного терминала.

Это означает, что каждый символ или управляющий код интерпретируется дважды при прохождении через слои. И tmux, и gnome-терминал поддерживают свое собственное состояние; у них есть собственное представление о том, как должен выглядеть экранный буфер (и иногда он может не синхронизироваться).

Это также означает примерно вдвое больше оперативной памяти для основного и альтернативного буферов. Прокрутка может также дублироваться, но редко (внешний терминал не обновляет прокрутку, потому что tmux переключил ее на «альтернативный буфер»).

Дублирование символов и управляющих кодов имеет смысл, но двойное требование к ОЗУ также противоречит утверждению @ Остина о том, что нет разницы в использовании системных ресурсов. abdelmak 5 лет назад 0
Обычно нет никакой заметной разницы, если только вы не пытаетесь использовать терминал с ячейками 10000x10000. Тем не менее, мультиплексор сохраняет свой собственный буфер (именно так вы можете отсоединить, а затем снова подключить и по-прежнему получать то же представление), и этот буфер должен где-то храниться, занимая пространство ОЗУ. Вся обработка, которую он выполняет, должна также использовать процессорное время. grawity 5 лет назад 0
@ grawity А как ты думаешь, как часто это будет иметь значение? Типичный размер окна терминала в 1920x1080 с 12-точечным шрифтом переводится примерно в 30 КБ пространства, необходимого для полного экрана (при условии, что каждая ячейка хранится в виде упакованного битового поля в 32-разрядном целом числе, что разумно предположить в большинстве случаев) и процессорное время для обработки обновлений для этого iis составляет не более микросекунд для большинства эмуляторов терминала (и даже меньше для мультиплексоров, потому что им не нужно делать связанные с GUI вызовы для обновления). Austin Hemmelgarn 5 лет назад 0
1
Austin Hemmelgarn

Самое большое отличие состоит в том, что вы можете подключиться к своему экрану или сеансам tmux с других терминалов (будь то терминальные эмуляторы, VT, сеансы SSH или даже реальные последовательные терминалы), но не можете сделать это с помощью вкладок в эмуляторе терминала. Это может показаться простым, но оно дает одно из самых больших преимуществ использования screen или tmux, особенно если вы имеете дело с удаленной системой: оно может остаться вне периода текущей сессии входа в систему, что очень полезно для ряд причин.

Есть несколько других отличий:

  • Использование screen или tmux означает, что вы всегда будете иметь ровно один дополнительный процесс на сеанс экрана или tmux (но не на окно / вкладку). В зависимости от используемого вами эмулятора терминала, у вас может не быть никаких дополнительных процессов, или у вас может быть более одного дополнительного.
  • Использование screen или tmux дает вам некоторые дополнительные функции, которые недоступны большинству эмуляторов терминала, такие как разделенные окна и возможность отправлять BREAK в приложении на вкладке.
  • Горячие клавиши, используемые для переключения окон / вкладок, различаются (хотя обычно их можно довольно легко перенастроить).
  • Вы можете использовать screen и tmux из любого терминального сеанса, но можете использовать вкладки только при использовании эмулятора терминала.
  • Экран (и, возможно, tmux) обеспечивает блокировку терминала. По сути, это эквивалентно блокировке экрана, которую вы видите на большинстве настольных компьютеров.

В обоих случаях каждое окно / вкладка в конечном счете имеет один связанный псевдотерминал (обычно сокращенно PTY). Реальная разница здесь заключается только в том, что на самом деле контролирует, к какому псевдотерминалу будет поступать ваш вход и откуда выводится вывод. Точная механика работы псевдотерминала немного сложна, но хорошо документирована в нескольких местах онлайн. Основная идея заключается в том, что он дает процессу способ притвориться фактическим аппаратным терминалом, чтобы он мог запустить другой процесс, который ожидает соединения с терминалом.

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

Спасибо! Это было действительно полезно. Так что, если я правильно понимаю, мультиплексоры наиболее полезны для использования удаленных входов в систему, потому что они «сохраняют» ваш сеанс в случае тайм-аута или разрыва соединения? abdelmak 5 лет назад 0
@abdelmak Да, но у этого есть некоторые практические применения помимо этого. Один большой из них - это миграция сеансов (например, начиная с локального сеанса, затем переключаясь на удаленный сеанс или наоборот). Austin Hemmelgarn 5 лет назад 0