Saya bertanya-tanya apa cara tercepat untuk menjalankan skrip, saya telah membaca bahwa ada perbedaan kecepatan antara menampilkan output skrip di terminal, mengarahkannya ke file atau mungkin /dev/null
.
Jadi jika outputnya tidak penting, apa cara tercepat untuk membuat skrip bekerja lebih cepat, bahkan jika minim.
bash ./myscript.sh
-or-
bash ./myscript.sh > myfile.log
-or-
bash ./myscript.sh > /dev/null
Jawaban:
Terminal akhir-akhir ini lebih lambat daripada biasanya, terutama karena kartu grafis tidak lagi peduli dengan akselerasi 2D. Jadi memang, mencetak ke terminal dapat memperlambat skrip, terutama saat pengguliran terlibat.
Akibatnya
./script.sh
lebih lambat daripada./script.sh >script.log
, yang pada gilirannya lebih lambat daripada/script.sh >/dev/null
, karena yang terakhir melibatkan lebih sedikit pekerjaan. Namun apakah ini cukup membuat perbedaan untuk tujuan praktis tergantung pada berapa banyak output yang dihasilkan skrip Anda dan seberapa cepat. Jika skrip Anda menulis 3 baris dan keluar, atau jika mencetak 3 halaman setiap beberapa jam, Anda mungkin tidak perlu repot dengan pengalihan.Sunting: Beberapa tolok ukur cepat (dan benar-benar rusak):
Di konsol Linux, 240x75:
Dalam sebuah
xterm
, 260x78:Redirect ke file, pada disk Samsung SSD 850 PRO 512GB:
Redirect ke
/dev/null
:sumber
timeout 1 yes "This is a looooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooong line"
cetak 100000+ baris dalam satu detik di MBP saya.)xterm
di HP Apollo dari 30 tahun yang lalu digunakan untuk merangkak dibandingkanxterms
pada HP-UX dari 20 tahun yang lalu. Namun, konsol Linux dengan kartu video Matrox dari 15 tahun yang lalu lebih lambat dari konsol Linux yang sama dengan kartu S3 dari 20 tahun yang lalu. Dan konsol Linux dengan buffer bingkai resolusi tinggi pada kartu modern tidak dapat digunakan. :)Saya akan setuju secara naluriah dengan jawaban Satō Katsura; masuk akal. Namun, itu cukup mudah untuk diuji.
Saya diuji menulis sejuta baris ke layar, menulis (menambahkan) ke file, dan mengarahkan ke
/dev/null
. Saya menguji masing-masing pada gilirannya, kemudian melakukan lima ulangan. Ini adalah perintah yang saya gunakan.Saya kemudian merencanakan total waktu di bawah ini.
Seperti yang Anda lihat, anggapan Satō Katsura benar. Sesuai jawaban Satō Katsura, saya juga ragu bahwa faktor pembatasnya adalah output, jadi tidak mungkin pilihan output akan memiliki efek besar pada kecepatan keseluruhan skrip.
FWIW, jawaban asli saya memiliki kode yang berbeda, yang memiliki file yang ditambahkan dan
/dev/null
dialihkan di dalam loop.Seperti yang ditunjukkan oleh John Kugelman dalam komentar, ini menambah banyak biaya tambahan. Seperti pertanyaannya, ini sebenarnya bukan cara yang tepat untuk mengujinya, tetapi saya akan meninggalkannya di sini karena jelas menunjukkan biaya membuka kembali file berulang kali dari dalam skrip itu sendiri.
Dalam hal ini, hasilnya terbalik.
sumber
xterm
, yang pada gilirannya ~ 3 kali lebih lambat dari/dev/null
.Cara lain untuk mempercepat skrip adalah dengan menggunakan juru bahasa shell yang lebih cepat. Bandingkan kecepatan loop sibuk POSIX , jalankan di bawah
bash
v4.4 ,ksh
v93u + 20120801 , dandash
v0.5.8 .bash
:Keluaran:
ksh
:Keluaran:
dash
:Keluaran:
Sebuah bagian dari perintah dalam
bash
danksh
yang backwardly kompatibel untuk semua perintah didash
. Sebuahbash
skrip yang hanya menggunakan perintah di bagian itu harus bekerja dengandash
.Beberapa
bash
skrip yang menggunakan fitur baru dapat dikonversi ke juru bahasa lain. Jikabash
skrip sangat bergantung pada fitur yang lebih baru, mungkin tidak sepadan dengan itu - beberapabash
fitur baru adalah peningkatan yang lebih mudah untuk dikodekan dan lebih efisien, (meskipunbash
secara umum lebih lambat), sehinggadash
setara, (yang mungkin melibatkan menjalankan beberapa perintah lain), akan lebih lambat.Saat ragu, jalankan tes ...
sumber