Saya berbicara secara khusus tentang program C # .NET 4 yang berjalan pada Windows XP atau lebih tinggi, tetapi jawaban umum juga dapat diterima.
Asumsikan program yang sudah dioptimalkan dan efisien. Masalahnya di sini sepenuhnya karena efek penggunaan CPU yang tinggi pada perangkat keras, dan apakah program penggunaan tinggi harus dibatasi untuk mengurangi keausan, bukan pada apakah implementasi saya efisien.
Seorang kolega hari ini menyarankan saya untuk tidak menggunakan 100% CPU pada proses pemuatan data saya karena "CPU modern murah dan akan menurun dengan cepat pada CPU 100%".
Apakah ini benar? Dan jika demikian, mengapa? Saya sebelumnya mendapat kesan bahwa penggunaan CPU 100% lebih disukai untuk operasi intensif atau lama, dan saya tidak dapat menemukan sumber yang dapat dipercaya pada subjek.
sumber
Jawaban:
Jika pendinginan tidak mencukupi, CPU mungkin terlalu panas. Tetapi mereka semua (yah, setidaknya semua CPU PC modern) memiliki berbagai mekanisme perlindungan termal yang akan mempercepat kecepatan clock atau, sebagai upaya terakhir, dimatikan.
Jadi ya, pada laptop yang berdebu, beban CPU 100% dapat menyebabkan masalah sementara, tetapi tidak ada yang akan rusak atau "menurun" (apa pun artinya).
Untuk masalah yang terikat CPU, beban CPU 100% adalah cara yang tepat.
Adapun respons aplikasi (UI), itu konsep yang terpisah dari pemanfaatan CPU. Sangat mungkin untuk memiliki aplikasi tidak responsif yang menggunakan CPU 1%, atau aplikasi responsif yang menggunakan CPU 100%. Responsif UI bermuara pada jumlah pekerjaan yang dilakukan di utas UI, dan prioritas utas UI dibandingkan utas lainnya.
sumber
Program Windows (winforms / WPF) harus selalu responsif. Dengan implementasi naif dari proses yang menggunakan sumber daya cpu 100%, itu terlalu mudah untuk membuat program Anda atau bahkan sistem Anda tampak lamban dan menggantung.
Dengan implementasi yang baik (misalnya: gunakan utas terpisah dengan prioritas lebih rendah) seharusnya tidak menjadi masalah.
Anda tidak perlu khawatir tentang kerusakan cpu Anda lebih cepat.
sumber
Biasanya tidak ada yang salah dengan program yang menggunakan CPU 100% sementara itu sebenarnya melakukan pekerjaan yang bermanfaat dan tidak mengambil waktu dari hal yang lebih penting . Jika platform perangkat keras tertentu misalnya hanya mampu menggunakan 100% CPU terus menerus selama satu detik sebelum harus kembali ke 50% untuk menghindari overheating, umumnya lebih baik untuk aplikasi yang memiliki pekerjaan yang berguna untuk melakukanuntuk berlari secepat mungkin, dan biarkan CPU atau OS menangani pembatasan yang diperlukan, daripada aplikasi untuk menebak seberapa cepat itu "harus" berjalan. Jika aplikasi atau utas memiliki pekerjaan prioritas rendah untuk dilakukan yang akan berguna tetapi tidak selalu kritis, mungkin akan membantu bagi OS untuk membatasi penggunaan CPU tugas rendah prioritas hingga 50% sehingga jika CPU perlu melakukan sesuatu yang cepat akan siap untuk "berlari" sebentar, tetapi aplikasi tidak perlu khawatir tentang hal-hal seperti itu di luar meminta prioritas utas rendah.
Situasi terbesar di mana penggunaan 100% CPU adalah saat salah:
Aplikasi ini sibuk menunggu beberapa peristiwa yang tidak akan dipercepat oleh pemungutan suara yang persisten [dan mungkin benar-benar ditunda jika upaya yang dilakukan mengecek apakah tugas yang dilakukan menempati sumber daya CPU yang seharusnya dapat dihabiskan dengan melakukan tugas].
Aplikasi ini menggambar ulang tampilan terlalu sering. Definisi "terlalu sering" akan tergantung dalam beberapa ukuran pada sifat perangkat layar dan konten yang ditampilkan. Jika perangkat keras layar dapat menampilkan 120fps, mungkin ada kasus di mana animasi dapat ditampilkan pada 120fps tanpa menambahkan motion blur, tetapi tidak dapat ditampilkan dengan bersih pada frame rate yang lebih rendah tanpa menambahkannya. Jika rendering frame dengan motion blur akan lebih lama daripada rendering tanpanya, maka rendering pada 120fps pada perangkat keras yang mendukungnya sebenarnya tidak lebih mahal daripada rendering pada frame rate yang lebih lambat dengan motion blur. [Situasi sederhana: roda dengan 29 jari-jari, berputar pada satu revolusi per detik. Pada 120fps, roda akan tampak berputar dengan kecepatan dan arah yang tepat; pada 60fps,
Yang pertama jelas dikenali sebagai buruk. Yang kedua sedikit lebih halus. Jika seseorang menargetkan platform seluler, dalam beberapa kasus mungkin diinginkan untuk memungkinkan pengguna memilih frame rate animasi yang diinginkan, karena beberapa pengguna mungkin tidak khawatir tentang masa pakai baterai tetapi menginginkan animasi kualitas terbaik, sementara yang lain akan menerima kualitas yang lebih rendah, sementara yang lain akan menerima kualitas yang lebih rendah animasi dengan imbalan masa pakai baterai yang lebih baik. Daripada meminta aplikasi mencoba menebak di mana seharusnya trade-off, mungkin akan membantu untuk membiarkan pengguna menyesuaikannya.
sumber
"CPU modern murah dan akan menurun dengan cepat pada CPU 100%".
Saya tidak berpikir ada orang yang benar-benar membahas bagian "menurunkan" dari pertanyaan ini. IC akan menurun ketika suhu die melebihi batas pabrikan. IC biasanya dirancang untuk beroperasi hingga 125C, meskipun setiap peningkatan 10C mempersingkat masa pakai hingga 50%
Prosesor tidak selalu memiliki pengaturan termal. Kemudian beberapa AMD Durons mengalami masalah (diduga itu mungkin untuk menghancurkan satu jika dijalankan tanpa heatsink). Sekarang semua prosesor PC akan memiliki sensor suhu built-in yang mengumpan balik ke jam CPU, dan akan memperlambat jam untuk mencegah kerusakan. Jadi Anda mungkin menemukan bahwa program Anda menggunakan 100% CPU yang tersedia tetapi CPU hanya berjalan pada 75% dari kecepatan pengenalnya karena pendinginannya tidak memadai.
Dalam program pengguna bukan tempat yang tepat untuk mencoba mengelola konsumsi CPU. Umumnya program Anda harus bergantian antara melakukan hal-hal secepat mungkin dan menunggu, ditangguhkan, untuk input atau akses disk. Anda harus menghindari kesibukan dan spinlocking jika memungkinkan, tetapi sebagai rasa hormat kepada seluruh sistem.
Baik Windows dan Linux memiliki sistem CPU "govenor" yang akan melakukan kinerja dan manajemen termal. Karena ini dilakukan pada level OS, ia dapat menjelaskan konsumsi total sistem CPU. Merupakan tanggung jawab sistem operasi untuk mengelola perangkat keras dan mencegah program pengguna menyalahgunakannya. Ini adalah tanggung jawab pemilik perangkat keras untuk menjaga kipas tetap bersih dan berfungsi, dan pabrikan untuk menyesuaikan heatsink dan kipas yang memadai di tempat pertama.
Ada beberapa kasus di mana perangkat memiliki pendinginan yang tidak memadai, tetapi banjir pengembalian mengajarkan produsen untuk tidak melakukan itu.
sumber
Untuk berperan sebagai pendukung iblis: Di satu sisi, sebuah program yang tidak dapat mencapai utilisasi 100% dapat menyebabkan keausan yang lebih buruk: Kecuali jika diskors menunggu menunggu keystroke, kemungkinannya adalah diskors menunggu disk I / O sebagian besar waktu. Dan disk (biasanya masih) perangkat mekanis besar yang dikenakan keausan mekanis atau risiko guncangan / efek gyroscopic ketika mereka bergerak, belum lagi konsumsi daya.
sumber
Anda tidak perlu khawatir tentang "degradasi CPU" sama sekali. CPU modern tidak berkualitas kurang dari di masa lalu.
Hal ini sangat mahal (dan semakin mahal setiap beberapa tahun) untuk membuat CPU, beberapa miliaran untuk membangun fab baru yang tidak biasa (lihat link).
http://en.wikipedia.org/wiki/Semiconductor_fabrication_plant
Biaya produksi CPU paling banyak bergantung pada no. unit yang diproduksi. Ini adalah fakta terkenal di bidang ekonomi. Itulah alasan mereka bisa dijual (relatif) "murah". (Saya pikir, tidak perlu tautan di sini)
Saya dapat membuat daftar beberapa alasan mengapa saya akan mempertimbangkan CPU modern cenderung lebih berkualitas daripada di "masa lalu".
Tetapi hanya yang paling penting: Keuntungan dalam pengujian. Elektronik modern "dirancang untuk diuji". Apakah perangkat lunak atau perangkat keras, wawasan luas untuk menilai pengujian atas hampir semua hal lain, tidak terlalu lama. Untuk CPU, tes bahkan diambil untuk membentuk harga dan jenis frekuensi yang berbeda, misalnya CPU terbaik dijual dengan frekuensi tertinggi. Meskipun demikian, prosesor yang lebih murah sangat sering dapat beroperasi dengan frekuensi yang lebih tinggi daripada yang dijual - mereka lumpuh hanya karena alasan bahwa produsen ingin menjual beberapa prosesor "tingkat tinggi" dengan harga lebih tinggi.
(Di satu sisi, tentu saja ada lebih banyak kesalahan yang mungkin terjadi pada prosesor dengan lebih dari 1,5 miliar transistor seperti biasa saat ini daripada dengan beberapa ribu transistor dari prosesor tahun tujuh puluhan. Tetapi ini tidak bertentangan dengan jawaban saya IMO. Prosesor pada umumnya cenderung memiliki banyak kesalahan yang diketahui, setidaknya dalam mikrokode, tetapi ini tidak dikenakan di sini.)
Bahkan ada lebih banyak alasan untuk tidak khawatir tentang penurunan CPU untuk program Anda:
Alasan pertama adalah CPU modern mengurangi frekuensi atau throttle mereka, jika terlalu panas.
Harus jelas bahwa jika Anda menggunakan CPU 100% 24/7 sepanjang tahun biasanya akan mati lebih awal dari CPU yang hanya digunakan setiap minggu satu jam. Tapi itu juga berlaku untuk mobil. Hanya dalam kasus seperti itu saya akan berpikir tentang pemanfaatan CPU dan potensi tidur sendiri.
Alasan kedua adalah sangat sulit untuk menulis sebuah program yang menggunakan 100% CPU dari OS, (misalnya di Windows). Selain itu, CPU modern (biasanya) memiliki setidaknya 2-4 core. Jadi algoritma tradisional yang cenderung menggunakan 100% dari CPU single core, sekarang hanya memiliki 50% pada CPU dual core (disederhanakan tetapi terlihat dalam skenario nyata).
Selain itu sistem operasi memiliki kontrol atas CPU dan bukan program Anda, jadi jika ada aplikasi lain dengan prioritas yang sama atau lebih tinggi (apa standarnya), program Anda hanya mendapatkan CPU sebanyak mungkin, tetapi aplikasi lain tidak akan kelaparan. (Tentu saja ini hanya teori yang disederhanakan, dan tentu saja multitasking Windows, Linux dan lainnya tidak sempurna, tetapi secara keseluruhan saya akan menganggap itu benar).
Ya, tetap dengan ini. Tapi misalnya, jika Anda menunggu & mengulang proses lain, dengan kata lain tidak melakukan apa-apa, tidak akan terlalu buruk jika Anda Thread. Tidur () beberapa milidetik dalam loop itu, memberikan waktu ekstra kepada orang lain. Sedangkan itu tidak perlu untuk OS multitasking yang baik, saya memecahkan beberapa masalah dengan ini misalnya untuk Windows 2000. (Itu TIDAK berarti tentu saja menggunakan Sleep () dalam perhitungan misalnya ..
sumber
Degradasi semacam itu secara teori dimungkinkan dan disebut " electromigration ". Elektromigrasi tergantung pada suhu, semakin cepat seiring naiknya suhu. Apakah ini merupakan masalah praktis untuk CPU modern masih diperdebatkan. Praktik desain VLSI modern mengkompensasi elektromigrasi dan chip lebih mungkin gagal karena alasan lain.
Karena itu, elektromigrasi terjadi bahkan pada beban dan suhu normal , tetapi cukup lambat bahwa chip yang dirancang dengan baik menjadi usang jauh sebelum gagal, atau gagal melalui mekanisme lain terlebih dahulu.
Laju elektromigrasi tergantung pada suhu chip, dengan masa pakai dua kali lipat untuk setiap (kira-kira) 10 ° C. Faktanya, ini adalah dasar dari sebuah tes yang disebut "HTOL" (masa operasi suhu tinggi), yang mengukur berapa lama untuk sebuah chip mati pada, katakanlah, 125 ° C. Chip yang berjalan pada 125 ° C akan gagal kira-kira 100 kali lebih cepat daripada chip yang berjalan pada 55 ° C, jadi jika dirancang untuk bertahan setidaknya 10 tahun pada 55 ° C, sebuah chip mungkin gagal dalam 1 bulan pada 125 ° C. Jika berjalan pada sesuatu yang lebih masuk akal seperti 85 ° C, chip seperti itu masih akan gagal setidaknya 5-10x lebih cepat daripada yang dirancang untuk itu.
Tentu saja, CPU biasanya dirancang dengan mempertimbangkan suhu yang lebih tinggi, sehingga biasanya dapat bertahan selama bertahun-tahun pada 85 ° C 24/7 operasi beban 100%. Jadi saya menyarankan agar Anda tidak khawatir tentang "aus" CPU, dan hanya khawatir tentang apakah beban 100% sesuai dari perspektif rekayasa perangkat lunak.
sumber
Jika Anda menjalankan kode pada klien, utilisasi CPU 100% berarti bahwa komputer klien pada waktu itu tidak dapat digunakan untuk hal lain selain tugas dengan prioritas lebih tinggi. Karena sebagian besar aplikasi biasanya berjalan dalam prioritas default, pengguna yang menggunakan komputer itu akan melihat komputer membeku dan tidak akan dapat melakukan hal lain di komputer mereka. Bahkan jika kita berbicara tentang ledakan singkat, pengguna yang mengerjakan sesuatu masih akan menyadarinya.
Seperti yang orang lain katakan, Anda cukup tertutup tentang pengaturannya, jadi saya tidak bisa mengatakan dengan pasti. Tapi, jika klien Anda adalah komputer desktop, jauhi utilisasi CPU 100%. Bukan karena degradasi CPU, tetapi karena itu bukan bentuk yang baik untuk mengganggu pengguna selama bekerja.
sumber
Jadi situasinya adalah ini: Anda memiliki beberapa kode yang berjalan katakanlah selama lima jam menggunakan 100% dari semua CPU, yang dioptimalkan sebanyak yang Anda bisa, pemilik mesin baik-baik saja dengan mesin tidak dapat digunakan selama lima jam, dan kolega Anda mengklaim akan lebih baik untuk menjalankan kode Anda dalam 6 jam menggunakan 83,33% dari semua CPU, karena menempatkan lebih sedikit keausan pada komputer.
Itu tergantung pada komputer yang Anda gunakan. Saya tahu bahwa produsen komputer menolak perbaikan garansi dalam waktu garansi pada komputer rumah murah yang digunakan dalam pengaturan ilmiah yang beroperasi 24/7. Mereka jelas ingin pelanggan membeli server yang lebih mahal atau komputer "bisnis". Apakah mereka berhasil, saya tidak tahu.
Setiap Mac yang saya miliki memiliki kode menjalankan hidupnya pada 100% penggunaan CPU selama berhari-hari. Dalam satu kasus saya harus mematikan layar, karena saya tidak memiliki pengisi daya asli untuk laptop, dan dengan 4 core dan hyper threading itu menggunakan daya lebih dari pengisi daya yang disediakan - sehingga baterai turun, dan ketika mencapai 5 persen komputer memperlambat kecepatan jam hingga baterai mencapai 10%! (Dengan layar dimatikan itu berlari dengan kecepatan penuh selama beberapa hari). Dalam hal apapun, efek buruk apa pun.
Jadi dengan komputer yang dirancang dengan baik, Anda benar. Dengan komputer murah yang didesain buruk, kolega Anda mungkin benar. Di sisi lain, Anda dapat mempertimbangkan biaya waktu tunggu Anda vs biaya membeli komputer pengganti.
sumber
Jika Anda bisa, jadikan kode Anda tugas dengan prioritas lebih rendah, dan pastikan untuk menjaga utas yang berat CPU terpisah dari GUI. Maka Anda mungkin memiliki utilisasi 100%, tetapi pengguna selalu dapat menjalankan tugas lain dan tetap responsif. Dengan sendirinya, CPU dirancang untuk tetap berjalan pada penggunaan 100% untuk sementara waktu, atau tidak akan dirilis. Kecuali jika pengguna akhir melakukan modifikasi serius dan berbahaya pada perangkat keras mereka, Anda tidak dapat merusak apa pun.
sumber