Saya seorang mahasiswa di bidang Ilmu Komputer dan saya sering mendengar kata "overhead" ketika datang ke program dan semacamnya. Apa artinya ini sebenarnya?
Saya seorang mahasiswa di bidang Ilmu Komputer dan saya sering mendengar kata "overhead" ketika datang ke program dan semacamnya. Apa artinya ini sebenarnya?
Jawaban:
Ini sumber daya yang diperlukan untuk mengatur operasi. Ini mungkin tampak tidak berhubungan, tetapi perlu.
Ini seperti ketika Anda perlu pergi ke suatu tempat, Anda mungkin perlu mobil. Tapi, akan banyak overhead untuk mendapatkan mobil untuk berkendara di jalan, jadi Anda mungkin ingin berjalan. Namun, biaya overhead akan sepadan jika Anda pergi ke seluruh negeri.
Dalam ilmu komputer, kadang-kadang kita menggunakan mobil untuk pergi ke jalan karena kita tidak memiliki cara yang lebih baik, atau tidak layak waktu kita untuk "belajar cara berjalan".
Arti kata bisa sangat berbeda dengan konteks. Secara umum, sumber dayanya (paling sering memori dan waktu CPU) yang digunakan, yang tidak berkontribusi langsung ke hasil yang diinginkan, tetapi diperlukan oleh teknologi atau metode yang digunakan. Contoh:
malloc
memiliki overhead 8 byte karena pengalokasi (dengan asumsi mesin 32-bit klasik) yang terdiri dari ukuran blok ditambah nilai penjaga. Dan itu bahkan sebelum Anda berpikir tentang perincian alokasi. Karenanya, daftar bilangan bulat 4-byte sederhana yang terhubung akan memiliki overhead 75%; array jauh lebih baik (kecuali Anda perlu penyisipan cepat di tengah) karena mereka dapat memiliki overhead sekali (atau kurang, jika array tidak dialokasikan secara dinamis).
Anda lelah dan tidak bisa melakukan pekerjaan lagi. Kamu makan makanan. Energi yang dihabiskan untuk mencari makanan, mendapatkannya dan benar-benar memakannya mengkonsumsi energi dan di atas kepala!
Overhead adalah sesuatu yang sia-sia untuk menyelesaikan suatu tugas. Tujuannya adalah membuat overhead sangat kecil.
Dalam ilmu komputer katakanlah Anda ingin mencetak nomor, itulah tugas Anda. Tetapi menyimpan nomor, pengaturan tampilan untuk mencetaknya dan memanggil rutinitas untuk mencetaknya, kemudian mengakses nomor dari variabel semua overhead.
Wikipedia telah kami liput :
Dalam ilmu komputer, overhead umumnya dianggap sebagai kombinasi waktu komputasi kelebihan atau tidak langsung, memori, bandwidth, atau sumber daya lain yang diperlukan untuk mencapai tujuan tertentu. Ini adalah kasus khusus overhead teknik.
Overhead biasanya mengacu pada jumlah sumber daya tambahan (memori, prosesor, waktu, dll.) Yang digunakan oleh algoritma pemrograman yang berbeda.
Misalnya, overhead memasukkan ke dalam Binary Tree yang seimbang bisa jauh lebih besar daripada memasukkan yang sama ke dalam Daftar Tertaut sederhana (insert akan memakan waktu lebih lama, menggunakan lebih banyak kekuatan pemrosesan untuk menyeimbangkan Pohon, yang menghasilkan waktu operasi yang lebih lama dipersepsikan oleh pengguna).
Untuk overhead programmer mengacu pada sumber daya sistem yang dikonsumsi oleh kode Anda saat dijalankan pada platform pemberian pada set input data tertentu. Biasanya istilah ini digunakan dalam konteks membandingkan berbagai implementasi atau kemungkinan implementasi.
Sebagai contoh, kita dapat mengatakan bahwa pendekatan tertentu mungkin menimbulkan overhead CPU yang cukup besar sementara yang lain mungkin mengeluarkan lebih banyak memori dan yang lain mungkin tertimbang untuk overhead jaringan (dan memerlukan ketergantungan eksternal, misalnya).
Mari kita berikan contoh spesifik: Hitung rata-rata (rata-rata aritmatika) dari satu set angka.
Pendekatan yang jelas adalah untuk mengulang input, menjaga total berjalan dan menghitung. Ketika nomor terakhir ditemui (ditandai oleh "end of file" EOF, atau nilai sentinel, atau beberapa GUI buttom, apa pun) maka kita cukup membagi total dengan jumlah input dan kita selesai.
Pendekatan ini hampir tidak menimbulkan overhead dalam hal CPU, memori atau sumber daya lainnya. (Ini tugas sepele).
Pendekatan lain yang mungkin adalah "mencelupkan" input ke dalam daftar. beralih ke daftar untuk menghitung jumlah, kemudian membaginya dengan jumlah item yang valid dari daftar.
Sebagai perbandingan, pendekatan ini mungkin menimbulkan jumlah memori yang sewenang-wenang.
Dalam implementasi buruk tertentu kita mungkin melakukan operasi penjumlahan menggunakan rekursi tetapi tanpa eliminasi ekor. Sekarang, selain overhead memori untuk daftar kami, kami juga memperkenalkan stack overhead (yang merupakan jenis memori yang berbeda dan seringkali merupakan sumber daya yang lebih terbatas daripada bentuk memori lainnya).
Namun pendekatan lain (mungkin lebih masuk akal) akan memposting semua input ke beberapa tabel SQL dalam RDBMS. Kemudian cukup memanggil fungsi SQL SUM pada kolom tabel itu. Ini menggeser overhead memori lokal kami ke beberapa server lain, dan menimbulkan overhead jaringan dan ketergantungan eksternal pada eksekusi kami. (Perhatikan bahwa server jauh mungkin atau mungkin tidak memiliki overhead memori tertentu yang terkait dengan tugas ini --- mungkin mendorong semua nilai segera keluar ke penyimpanan, misalnya).
Secara hipotesis mungkin mempertimbangkan implementasi atas beberapa jenis cluster (mungkin untuk membuat rata-rata triliunan nilai layak). Dalam hal ini, setiap pengkodean dan distribusi nilai yang diperlukan (memetakannya ke node) dan pengumpulan / pengumpulan hasil (pengurangan) akan dihitung sebagai overhead.
Kita juga dapat berbicara tentang overhead yang ditimbulkan oleh faktor-faktor di luar kode programmer sendiri. Sebagai contoh kompilasi beberapa kode untuk prosesor 32 atau 64 bit mungkin memerlukan overhead yang lebih besar daripada yang akan dilihat untuk arsitektur 8-bit atau 16-bit yang lama. Ini mungkin melibatkan overhead memori yang lebih besar (masalah pelurusan) atau overhead CPU (di mana CPU dipaksa untuk menyesuaikan pemesanan bit atau menggunakan instruksi yang tidak selaras, dll) atau keduanya.
Perhatikan bahwa ruang disk yang diambil oleh kode Anda dan pustaka, dll. Biasanya tidak disebut sebagai "overhead" tetapi lebih disebut "footprint." Juga memori dasar yang dikonsumsi oleh program Anda (tanpa memperhatikan kumpulan data apa pun yang sedang diproses) disebut juga "footprint" -nya.
Overhead hanyalah konsumsi waktu yang lebih banyak dalam pelaksanaan program. Contoh; ketika kita memanggil suatu fungsi dan kontrolnya dilewati di mana ia didefinisikan dan kemudian tubuhnya dieksekusi, ini berarti bahwa kita membuat CPU kita untuk menjalankan melalui proses panjang (pertama melewati kontrol ke tempat lain di memori dan kemudian mengeksekusi di sana dan kemudian melewati kontrol kembali ke posisi sebelumnya), akibatnya butuh banyak waktu kinerja, karenanya Overhead. Tujuan kami adalah untuk mengurangi overhead ini dengan menggunakan inline selama definisi fungsi dan waktu panggilan, yang menyalin konten fungsi pada pemanggilan fungsi sehingga kami tidak meneruskan kontrol ke beberapa lokasi lain, tetapi melanjutkan program kami dalam satu baris, maka inline .
Anda bisa menggunakan kamus. Definisinya sama. Tetapi untuk menghemat waktu Anda, Overhead adalah pekerjaan yang diperlukan untuk melakukan pekerjaan yang produktif. Sebagai contoh, suatu algoritma berjalan dan melakukan pekerjaan yang bermanfaat, tetapi membutuhkan memori untuk melakukan tugasnya. Alokasi memori ini membutuhkan waktu, dan tidak terkait langsung dengan pekerjaan yang sedang dilakukan, oleh karena itu adalah biaya overhead.
Anda dapat memeriksa Wikipedia . Tetapi terutama ketika lebih banyak tindakan atau sumber daya digunakan. Seperti jika Anda terbiasa dengan .NET di sana Anda dapat memiliki tipe nilai dan tipe referensi. Tipe referensi memiliki overhead memori karena mereka membutuhkan lebih banyak memori daripada tipe nilai.
Contoh nyata overhead adalah perbedaan antara panggilan prosedur "lokal" dan panggilan prosedur "jarak jauh".
Misalnya, dengan RPC klasik (dan banyak kerangka kerja jarak jauh lainnya, seperti EJB), panggilan fungsi atau metode terlihat sama dengan seorang koder apakah itu panggilan lokal, dalam memori, atau panggilan jaringan yang didistribusikan.
Sebagai contoh:
service.function(param1, param2);
Apakah itu metode normal, atau metode jarak jauh? Dari apa yang Anda lihat di sini, Anda tidak bisa mengatakannya.
Tetapi Anda dapat membayangkan bahwa perbedaan waktu eksekusi antara kedua panggilan itu dramatis.
Jadi, sementara implementasi inti akan "biayanya sama", "overhead" yang terlibat sangat berbeda.
Pikirkan overhead sebagai waktu yang diperlukan untuk mengelola utas dan berkoordinasi di antara mereka. Merupakan beban jika utas tidak memiliki cukup tugas untuk dilakukan. Dalam kasus seperti itu, biaya overhead datang dari waktu yang dihemat melalui penggunaan threading dan kode membutuhkan lebih banyak waktu daripada yang berurutan.
apapun selain data itu sendiri, yaitu flag tcp, header, crc, fcs dll.