Pertanyaan Apakah waktu. Tidur membantu prosesor?


Baru-baru ini saya berselancar di Stack Overflow (Python) dan melihat posting ini dimana Aaron Hall mengklaim itu

terus berjalan sementara loop dapat mengkonsumsi banyak kekuatan pemrosesan. Menambahkan periode tidur (meskipun hanya sedetik) dapat sangat mengurangi penggunaan itu.

Apakah itu benar? Dan jika ya, bagaimana bisa? Apakah aturan yang sama berlaku untuk bahasa pemrograman lain juga (mis. C ++)?


8
2017-07-18 13:14


asal


Jawaban:


TL; DR Jika Anda melakukan polling untuk suatu peristiwa yang terjadi satu menit sekali, Anda mungkin ingin tidak memeriksa setiap nano detik.

Ya, itu benar. Tidur di utas mengurangi pemakaian CPU dari utas itu. Sementara thread tidur, hampir tidak mengkonsumsi waktu CPU.

Ya, ini berlaku untuk sebagian besar bahasa apa pun selama tidur diimplementasikan menggunakan OS native threading API.

Untuk berpikir tentang hal ini secara intuitif, mari kita mempertimbangkan versi program yang disederhanakan dari pertanyaan terkait:

while end_condition_expression:
    if time_based_condition_expression:
        do_something()

Sekarang, mari kita sederhanakan dunia, dan anggaplah bahwa program adalah satu-satunya proses yang berjalan pada prosesor.

Mari kita juga berasumsi, bahwa kondisi berdasarkan waktu benar satu menit. Mari kita juga berasumsi bahwa mengeksekusi end_condition_expression  dan time_based_condition_expression biaya 10 detik nano waktu cpu.

Berapa banyak waktu cpu akan mengkonsumsi ini dalam satu menit? Tepat satu menit == 60 000 000 000 nano detik. Penggunaan cpu akan menjadi 100% sepanjang waktu. Lingkaran itu akan terulang enam miliar kali.

Sekarang, pertimbangkan variasi program ini:

while end_condition_expression:
    if time_based_condition_expression:
        do_something()
    sleep_for_a_second()

Berapa kali loop akan dieksekusi dalam satu menit? 60 iterasi. Berapa banyak waktu cpu akan mengkonsumsi ini dalam satu menit? 60 * 10 ns = 600 ns. Itu adalah seratus juta dari versi non-tidur dari program yang digunakan.

Pada kenyataannya, ada sedikit overhead dari panggilan untuk tidur, dan waktu cpu dibagi dengan proses lain, dan penjadwal terlibat, dan penggunaan CPU yang tepat tidak akan tepat sesuai dengan asumsi saya, tetapi ide tetap sama .


9
2017-07-18 15:22