Saya telah mencoba berbagai terminal emulator akhir-akhir ini, dari terminal gnome, aterm, xterm, wterm, hingga rxvt. Tes yang saya lakukan adalah dalam urutan ini:
- Buka jendela tmux dengan 2 panel
- Panel kiri akan menjadi tugas intensif-verbal seperti
grep a /et/c -r
atau sederhanatime seq -f 'blah blah %g' 100000
- Panel kanan akan menjadi jendela vim dengan sintaks aktif, membuka file apa pun yang memiliki lebih dari> 100 baris kode.
Ketika panel kiri mencetak banyak output, panel kanan tampaknya sangat lambat dan tidak responsif, saya mencoba untuk menggulir dalam vim tetapi butuh 1-2 detik untuk itu berubah. Ketika saya mencoba menekan CtrlCpada panel kiri ia menunggu lebih dari 10 detik sebelum berhenti
Ketika saya melakukan hal yang sama di TTY (menekan CTRL+ ALT+ ( F[1-6])), itu tidak terjadi dan kedua panel sangat responsif.
Saya telah memutar beberapa konfigurasi seperti font antialias, pergantian warna, menggunakan pengaturan default, dan mengubah ke xmonad dan openbox, tetapi tidak mengubah apa pun.
Hasilnya time seq -f 'blah blah %g' 100000
tidak terlalu berbeda di antara terminal-terminal ini, tetapi daya tanggapnya benar-benar berbeda terutama ketika saya menjalankan panel spitted tmux (atau multiplexer lainnya). FYI, saya menjalankan semuanya dalam mode maksimal.
Saya telah membaca tentang terminal buffered terminal tetapi tidak yakin bagaimana cara kerjanya dan bagaimana bisa digunakan untuk mempercepat emulator terminal saya.
Jadi pertanyaan saya adalah, apa yang membuat emulator terminal jauh lebih lambat daripada TTY? Apakah ada kemungkinan untuk membuatnya secepat TTY? Mungkin akselerasi perangkat keras atau semacamnya? Satu hal yang saya tahu, resolusi saya di server X ketika menjalankan emulator terminal dimaksimalkan adalah 1920x1080, dan ketika saya menjalankan TTY itu kurang dari itu, tapi saya tidak yakin bagaimana ini akan mempengaruhi kinerja.
Jawaban:
Ketika emulator terminal GUI mencetak string, itu harus mengubah string ke font codepoints, mengirim codepoints ke font renderer, mendapatkan kembali bitmap dan blit bitmap itu ke tampilan melalui server X.
Font renderer harus mengambil mesin terbang dan menjalankannya (tahukah Anda bahwa font Truetype / Opentype adalah program yang berjalan di dalam mesin virtual dalam font renderer?). Selama proses menjalankan setiap mesin terbang, sejumlah keputusan gila dibuat sehubungan dengan metrik font, kerning (meskipun font monospace dan kerning tidak tercampur dengan baik), kepatuhan Unicode, dan bahkan sebelum kita mencapai rasteriser yang mungkin menggunakan sub pengalamatan -pixel. Terminal kemudian harus mengambil buffer yang dihasilkan oleh font rasteriser dan membelahnya ke tempat yang tepat, mengurus konversi format piksel, saluran alfa (untuk pengalamatan sub-piksel), menggulir (yang melibatkan lebih banyak blitting), dan lain-lain.
Sebagai perbandingan, menulis string ke Terminal Virtual yang berjalan dalam mode teks (catatan: bukan konsol grafis) melibatkan penulisan string itu ke memori video. 'Halo Dunia!' melibatkan menulis 13 byte (13 kata 16-bit jika Anda ingin warna juga). Rasteriser font X bahkan belum memulai latihan peregangan dan penjemputan buku jari, dan kita sudah selesai. Inilah mengapa mode teks sangat penting dalam beberapa dekade terakhir. Ini sangat cepat untuk diimplementasikan. Bahkan menggulir lebih mudah daripada yang Anda pikirkan: bahkan pada MDA dan CGA berbasis Motorola 6845 yang terhormat, Anda dapat menggulir layar secara vertikal dengan menulis nilai 8-bit tunggal ke register (mungkin 16 ... sudah terlalu lama). Sirkuit penyegaran layarmelakukan sisanya. Anda pada dasarnya mengubah alamat awal buffer bingkai.
Tidak ada yang dapat Anda lakukan untuk membuat terminal grafis secepat terminal mode teks pada komputer yang sama . Tapi berhati-hatilah: ada komputer dengan mode teks lebih lambat daripada terminal grafis paling lambat yang pernah Anda lihat di komputer modern. IBM PC asli sangat buruk (DOS melakukan pengguliran perangkat lunak, desah). Ketika saya melihat konsol Minix pertama saya pada 80286, saya kagum dengan kecepatan scroll (melompat). Kemajuan itu baik.
Perbarui: cara mempercepat terminal
@ poige sudah menyebutkan tiga jawaban , tapi ini pendapat saya sendiri:
xterm
danrxvt
bekerja dengan sangat baik, ia memiliki emulator terminal yang fantastis. Saya menduga tes Anda mungkin menunjukkan kinerjanya lebih baik daripada yang 'modern'.tmux
- jalankan dua terminal terpisah berdampingan. Saattmux
menampilkan dua panel, ia harus menggunakan arahan terminal untuk banyak menggerakkan kursor. Meskipun perpustakaan terminal modern sangat cepat dan bagus dalam mengoptimalkan, mereka masih mencuri byte dari bandwidth terminal mentah Anda. Untuk memindahkan kursor ke baris arbitrer pada terminal yang kompatibel dengan DEC VT, Anda mengirimESC [ row ; col H
. Itu 6–10 byte. Dengan beberapa terminal, Anda memisahkan pekerjaan, menghilangkan kebutuhan untuk penentuan posisi, optimasi, buffering dan semua hal lainnyacurses
, dan membuat lebih baik menggunakan beberapa core CPU.sumber
Sementara @Alexios telah menggambarkan dengan baik semua alasan, saya dapat menyebutkan beberapa hal, yang relatif menghilangkan rasa sakit:
Terminal
,Terminus
- ini benar-benar hebat),konsole
.sumber
konsole
(yang saya sukai).konsole
tidak memperbarui layar malas: alih-alih segera menampilkan output, ia menunggu sedikit waktu untuk lebih banyak output, sehingga untuk "batch" pembaruan. Itulah sebabnya ia berkinerja sangat baik, sampai benar-benar responsif dengan tes stres OP.