Saya mendapati diri saya menggunakan -v
flag untuk banyak aplikasi semakin sedikit (terutama untuk hal-hal sepele seperti tar
dan cp
). Namun, ketika saya melakukannya dan saya, katakanlah, membuka ritsleting file besar, itu akan memakan waktu lebih lama daripada ketika saya tidak menggunakan -v
bendera.
Saya berasumsi ini karena terminal harus memproses teks dan saya mengisi buffer apa pun yang mungkin ada. Tetapi pertanyaan saya adalah, apakah ini membuat aplikasi benar-benar berjalan lebih lambat atau apakah itu selesai dalam jumlah waktu yang sama dan apa yang saya lihat adalah terminal berusaha untuk mengejar ketinggalan?
tar xvf file.tar > /dev/null
vstar xf file.tar
? Pengalihan ke/dev/null
harus mengambil terminal Anda dari ini.stdout
danstderr
merupakan line-buffered - yang berarti bahwa mengisi buffer tidak mengambil yang lama - itu adalah memblokirprintf
panggilan (dan dengan ekstensi terminal output) yang mengambil selamanya.Jawaban:
Ya, menjalankan verbose akan memperlambat aplikasi Anda.
Berapa banyak tergantung pada aplikasi.
Setiap cetakan ke terminal akan membutuhkan waktu pemrosesan tambahan. Dalam hal menggunakan printf () atau saudara-saudara perempuannya, ini adalah proses pengolahan yang terbilang cukup berat.
Juga, terminal harus berurusan dengan data itu. Ada jumlah ruang buffer yang terbatas antara aplikasi dan terminal, dan saluran IO akan memblokir sampai ada cukup ruang di buffer tersebut untuk benar-benar menampilkan data. Aplikasi umumnya tidak dapat melanjutkan saat pemblokiran ini sedang berlangsung. 1
Juga, tindakan menampilkan teks debug pada terminal akan memakan siklus pemrosesan. Sekali lagi, ini tergantung pada aplikasi (jumlah debugging), program terminal (font yang digunakan, efek, dll) dan bahkan driver X windows yang digunakan (akselerasi perangkat keras, dll).
The
time
program dapat digunakan untuk cukup akurat menentukan berapa lama perintah telah diambil untuk menjalankan. Menjalankan program yang sama dua kali sepanjang waktu, sekali dengan debugging, dan sekali tanpa, akan menunjukkan kepada Anda berapa banyak perbedaan yang terjadi. Saya akan menyarankan menjalankan perintah sekali sebelum melakukan tes untuk memastikan bahwa caching adalah sama untuk kedua tes berjalan dari perintah. Anda tidak ingin memiringkan hasilnya dengan menjalankan kedua berjalan lebih cepat karena sebagian besar data di-cache oleh jalankan pertama sekarang apakah Anda ...1 Dalam kasus aplikasi multithreaded hanya utas yang melakukan keluaran debug yang benar-benar akan diblokir.
sumber
dir c:\/s/a
. Anda dapat melihat perubahan kecepatan ketika benar-benar terlihat dan sebagian tertutup. Anda tidak dapat melihatnya mempercepat ketika diminimalkan, tetapi pasti lebih cepat, meskipun Anda harus reboot jika Anda ingin menguji, untuk mem-bypass caching yang akan membuatnya menjadi lebih cepat, karena itu tidak akan memiliki untuk mengakses disk.Itu tergantung pada aplikasi yang Anda jalankan. Namun, secara umum, kita dapat mengatakan bahwa verbose akan memperlambat aplikasi Linux yang paling umum karena mereka harus menyinkronkan tindakan mereka antara stdout dan I / O atau batas prosesor.
sumber
Menggunakan
yes
sebagai test case pada OS X 10.7, tampaknya memang penting jika Anda mencetak banyak output ke terminal, seperti yang diharapkan.Mengkuantifikasi ini sedikit lebih jauh, saya berlari
yes
selama 5 detik, dalam satu kasus mencetak output ke terminal dan menyimpannya ke file (dengantee
), dalam kasus lain melakukan hal yang sama kecuali mengarahkanstdout
ke/dev/null
:yes | tee yeslog_term & sleep 5 && killall yes && wc -l yeslog_term
yes | tee yeslog_noterm > /dev/null & sleep 5 && killall yes && wc -l yeslog_noterm
Kasus 1. memberi 2371584 garis dan kasus 2. memberikan 136421376 garis, atau 57 kali lebih banyak. 'Kinerja'
yes
(yang diukur dengan jumlah garis yang dicetak per unit waktu) dalam hal ini 57 kali lebih lambat .Satu catatan samping di sini adalah bahwa saya digunakan
yes
bersama dengan ditee
sini, yang mungkin mempengaruhi hasil sedikit, namun saya pikir hasilnya masih valid.Indikasi lain bahwa program ini melambat adalah bahwa berjalan
yes
saat mengeluarkan ke terminal, terminal menggunakan sekitar 100% CPU danyes
hanya sekitar 37%, sementara berjalanyes
tanpa mengeluarkan ke terminal ia menggunakan penuh 100% (Ini adalah pada multi- mesin inti, jadiyes
bisa menggunakan lebih banyak CPU jika bisa, kecuali itu diperlambat oleh terminal).sumber
Mudah untuk menjawab ya, itu akan memperlambat aplikasi. Tetapi jawaban yang jauh lebih benar adalah 99% kasus tidak masalah.
Jika aplikasi Anda melakukan pekerjaan apa pun yang benar-benar membutuhkan daya CPU, kemungkinan mencetak beberapa baris teks tambahan ke layar membuat segala jenis perbedaan mendekati 0%.
Bahkan, Anda dapat dengan mudah membuat penilaian sendiri: Jika aplikasi tersebut memuntahkan tembok teks yang sangat besar, mungkin sebenarnya Anda harus membayar sedikit. Mungkin.
sumber
printf()
mahal sekaliKode verbose biasanya dievaluasi dengan instruksi if dan setiap kali melewati kontrol ke fungsi tampilan, semakin lama waktu yang dibutuhkan, konteksnya bisa dialihkan, lebih banyak interupsi.
Tapi itu tergantung, jika kode verbose Anda adalah utas terpisah yang hanya memeriksa keadaan penyelesaian dari waktu ke waktu perbedaannya dapat diabaikan.
Pertanyaan ini bisa mendapat banyak manfaat dari kontribusi pemrogram berpengalaman stackoverflow. Saya sarankan pindah :)
sumber