Apakah menggunakan -v (verbose) memperlambat perintah?


34

Dalam pertanyaan ini: Bagaimana menghapus semua file dan subdirektori dalam direktori TANPA menghapus direktori dalam bash? ditanya bagaimana menghapus semua file dalam folder, dan bukan folder itu sendiri.

Jawaban Matt yang bagus mencakup penggunaan flag -v ke perintah 'rm'.

rm -rfv dontDeleteMe && mkdir dontDeleteMe

Perintah yang kutinggalkan adalah perintah di atas. Memang memang bermanfaat, tetapi apakah tanda -v di 'rm' dan / atau secara umum memperlambat tugas yang dilakukan melalui baris perintah?

Saya memiliki folder dengan file .txt (sekitar 100.000 di antaranya) yang telah saya buat, hapus, dan buat ulang untuk saya sendiri beberapa kali sekarang. Beberapa kali dengan rm, beberapa kali di filebrowser, dan saya merasa lebih lambat menggunakan rm-command seperti yang ditunjukkan di atas. Apakah flag -v ada hubungannya dengan ini?

Jawaban:


37

Ya, flag -v memperlambat perintah.

Sebagian besar, jika tidak semua perangkat lunak (atau perintah) akan memeriksa apakah suatu bendera disediakan, dan kemudian menjalankan banyak kode yang terkait dengan bendera tersebut. Dalam kasus flag -v, mereka kemungkinan akan mengeksekusi sekelompok perintah output (seperti echoatau printf), yang mereka lebih suka lewati tanpa flag.

Ini berarti lebih banyak siklus instruksi untuk prosesor dan dengan demikian lebih banyak waktu eksekusi.

Lebih baik jika Anda tidak menggunakan flag -v jika Anda tidak akan membaca / membutuhkan pesan.

Di sisi lain, CLI akan / harus lebih cepat dari GUI, dengan asumsi bahwa Anda tidak menyertakan waktu yang diperlukan untuk mengetik perintah dan menekan Entertombol.

Dari blog superuser ini gambar ini menjelaskan kelambatan dengan sangat baik

masukkan deskripsi gambar di sini

Untuk perintah spesifik yang dimaksud, hasil dari perintah waktu adalah

//with -v
real    0m8.753s
user    0m0.816s
sys     0m2.036s

//without -v
real    0m1.282s
user    0m0.124s
sys     0m1.092s

ini dilakukan dengan direktori yang berisi 100000 file kosong


9
Saya tidak akan berbicara tentang "perintah gema". Sebagian besar program bukan skrip bash sehingga tidak memanggil gema. Masalahnya adalah bahwa mereka menulis ke stdout (atau stderr ), dengan kata lain, mereka melakukan operasi I / O, yang membutuhkan waktu (I / O mahal) dan mereka juga memerlukan panggilan sistem (yang berarti lebih banyak konteks switch dan karenanya lebih banyak cache ketinggalan dll).
Bakuriu

23
Masalah utama dengan menulis ke stdout adalah rendering sebenarnya dari konten itu; jika Anda mengarahkan stdout ke file, atau /dev/null, kinerja hampir tidak terhambat seperti menampilkan teks pada emulator terminal.
Jacob Krall

Seperti yang dapat Anda lihat dari grafik, perbedaan waktu dapat diabaikan jika Anda berbicara tentang waktu respons dari sudut pandang manusia. Jadi, jika Anda khawatir tentang efisiensi bagi seseorang yang menonton perintah, itu tidak relevan. Ini hanya relevan untuk sejumlah besar file atau untuk banyak proses yang berulang-ulang di mana waktu komputer sangat berharga (misalnya server web yang sibuk atau komputer kuno).
Paddy Landau

Dampak yang paling, dan mungkin satu-satunya kasus di mana itu akan menjadi masalah, adalah ketika Anda menjalankan perintah pada mesin jarak jauh melalui SSH. Verbose logging dapat dengan mudah menghasilkan puluhan megabyte lalu lintas yang harus ditransmisikan dari host ke konsol Anda. Saya pernah mengalami percepatan dalam urutan 10x setelah menghapus konsol logging berlebihan dari skrip yang saya jalankan melalui SSH.
Sergey

5

Mengapa tidak mencari tahu sendiri: gunakan waktu.

$ time rm -rfv dontDeleteMe && mkdir dontDeleteMe
real    0m0.003s
user    0m0.001s
sys     0m0.002s

$ time rm -rf dontDeleteMe && mkdir dontDeleteMe
real    0m0.002s
user    0m0.001s
sys     0m0.001s

10
Ini tidak benar-benar menjawab pertanyaan. Perbedaan 1 ms antara menjalankan tunggal setiap perintah dapat disebabkan oleh banyak faktor. Juga tidak jelas apakah Anda menghapus -voutput atau direktori itu kosong.

Belum lagi perlambatan bukan dari instruksi yang dieksekusi ekstra, tetapi dari proses penulisan ke file atau terminal. time' pretty much redirects the output to / dev / null '.
Cole Johnson
Dengan menggunakan situs kami, Anda mengakui telah membaca dan memahami Kebijakan Cookie dan Kebijakan Privasi kami.
Licensed under cc by-sa 3.0 with attribution required.