Saya memiliki skrip yang mengkonversi file video dan saya menjalankannya di server pada data uji dan mengukur waktunya time
. Hasilnya saya melihat:
real 2m48.326s
user 6m57.498s
sys 0m3.120s
Mengapa waktu sebenarnya jauh lebih rendah daripada waktu pengguna? Apakah ini ada hubungannya dengan multithreading? Atau apa lagi?
Sunting: Dan saya pikir skrip itu berjalan sekitar 2m48s
real
waktu adalah jam dinding seperti yang dijelaskan di bawah ini (yaitu apa yang akan kami ukur jika kami memiliki stop-watch)Jawaban:
Output yang Anda tunjukkan agak aneh, karena real time biasanya akan lebih besar daripada dua lainnya.
Real
waktu adalah jam dinding. (apa yang bisa kita ukur dengan stopwatch)User
waktu adalah jumlah waktu yang dihabiskan dalam mode pengguna dalam prosesSys
adalah waktu CPU yang dihabiskan di kernel dalam proses.Jadi saya kira jika pekerjaan itu dilakukan oleh beberapa prosesor secara bersamaan, waktu CPU akan lebih tinggi daripada waktu jam dinding yang berlalu.
Apakah ini jenis aplikasi bersamaan / multi-utas / paralel?
Sama seperti contoh, ini yang saya dapatkan di sistem Linux saya ketika saya mengeluarkan
time find .
perintah. Seperti yang diharapkan,real
waktu yang telah berlalu jauh lebih besar daripada yang lain pada proses pengguna tunggal / inti tunggal ini.Aturan praktisnya adalah:
sumber
avconv
multi-threaded. Mungkin itu.avconv
adalah generasi baruffmpeg
. Saya mengonversi 7 file flv pendek (masing-masing sekitar 20 detik).find
contohusr
nilai jauh lebih rendah karena sebagian besar waktu telah dihabiskan selama interupsi, bahkan jikafind
akan multithreaded itu akan tetap rendah (maaf jika saya tidak menguasai tenses bahasa Inggris).Hanya untuk menggambarkan apa yang telah dikatakan, dengan dua proses ulir melakukan perhitungan.
menyusun
(Ini hanya sebagai ilustrasi, dalam kehidupan nyata saya seharusnya menambahkan flag -D_REENTRANT)
(Waktu pada Intel Atom yang memiliki dua core lambat :))
sumber