GNU/Linux >> Belajar Linux >  >> Linux

Apakah menjalankan perintah dengan kata-kata membuatnya lebih lambat?

Ya, menjalankan verbose akan memperlambat aplikasi Anda.

Berapa banyak tergantung pada aplikasinya.

Setiap pencetakan ke terminal akan membutuhkan waktu pemrosesan tambahan. Dalam hal menggunakan printf() atau salah satu dari saudara perempuannya, ini adalah pemborosan pemrosesan yang cukup banyak.

Juga, terminal harus berurusan dengan data itu. Ada ruang buffer dalam jumlah terbatas antara aplikasi dan terminal, dan saluran IO akan memblokir sampai ada cukup ruang dalam buffer tersebut untuk benar-benar mengeluarkan data. Aplikasi biasanya tidak dapat dilanjutkan saat pemblokiran ini berlangsung.

Selain itu, tindakan menampilkan teks debug pada terminal akan menghabiskan siklus pemrosesan. Sekali lagi, ini bergantung pada aplikasi (jumlah debug), program terminal (font yang digunakan, efek, dll.) dan bahkan driver X windows yang digunakan (akselerasi perangkat keras, dll.).

time program dapat digunakan untuk menentukan dengan cukup akurat berapa lama waktu yang diperlukan untuk menjalankan perintah. Menjalankan program yang sama dua kali sepanjang waktu, sekali dengan debugging, dan sekali tanpa, akan menunjukkan kepada Anda seberapa besar perbedaannya. Saya akan menyarankan menjalankan perintah satu kali sebelum melakukan tes untuk memastikan bahwa caching sama untuk kedua tes menjalankan perintah. Anda tidak ingin memiringkan hasil dengan menjalankan proses kedua lebih cepat karena sebagian besar data di-cache oleh proses pertama sekarang, bukan...

Dalam kasus aplikasi multithread, hanya utas yang melakukan keluaran debug yang benar-benar akan diblokir.


Itu tergantung pada aplikasi yang Anda jalankan. Namun, secara umum, kami dapat mengatakan bahwa verbose akan memperlambat aplikasi Linux yang paling umum karena mereka harus menyinkronkan aksinya antara stdout dan I/O atau batas prosesor.


Menggunakan yes sebagai uji kasus pada OS X 10.7, tampaknya penting jika Anda mencetak banyak keluaran ke terminal, seperti yang diharapkan.

Mengukur ini sedikit lebih jauh, saya menjalankan yes selama 5 detik, dalam satu kasus mencetak output ke terminal dan menyimpannya ke file (dengan tee ), dalam kasus lain melakukan hal yang sama kecuali mengarahkan ulang stdout ke /dev/null :

  1. yes | tee yeslog_term & sleep 5 && killall yes && wc -l yeslog_term
  2. yes | tee yeslog_noterm > /dev/null & sleep 5 && killall yes && wc -l yeslog_noterm

Kasus 1. memberikan 2371584 baris dan kasus 2. berikan 136421376 baris, atau 57 kali lebih banyak. 'Kinerja' yes (diukur dengan jumlah baris yang dicetak per satuan waktu) dalam hal ini 57 kali lebih lambat .

Satu catatan tambahan di sini adalah saya menggunakan yes bersama dengan tee di sini, yang mungkin sedikit memengaruhi hasil, namun menurut saya hasilnya masih valid.

Indikasi lain bahwa program melambat adalah menjalankan yes saat mengeluarkan ke terminal, terminal menggunakan sekitar 100% CPU dan yes hanya sekitar 37%, saat menjalankan yes tanpa mengeluarkan ke terminal, ia menggunakan 100% penuh (Ini pada mesin multi-core, jadi yes bisa menggunakan lebih banyak CPU jika bisa, kecuali diperlambat oleh terminal).


Linux
  1. Linux – Apa yang Dilakukan 'membuat Localmodconfig'?

  2. Apakah Utilitas Linux Cerdas Saat Menjalankan Perintah Pipa?

  3. Bagaimana Mengirim Perintah ke Terminal Apa Pun?

  1. Linux – Membuat Penyalinan Disk/disk Lebih Lambat?

  2. Terminal Mac vi[m] Perintah Editor

  3. Buat salinan disk/disk lebih lambat

  1. 5 perintah Linux yang akan saya mulai gunakan

  2. Menjalankan Perintah Linux di Latar Belakang dan Latar Depan

  3. Menggunakan output dari perintah sebelumnya di bash