"ओवरहेड" क्या है?


149

मैं कंप्यूटर विज्ञान में एक छात्र हूं और कार्यक्रमों और प्रकारों के बारे में "ओवरहेड" शब्द बहुत सुन रहा हूं। इसका वास्तव में क्या मतलब है?


27
कुछ पाने के लिए आपको कितना "अतिरिक्त सामान" चाहिए। उदाहरण के लिए अगर मुझे "हैलो वर्ल्ड" छापने के लिए सिर्फ 37 वर्ग का प्रोजेक्ट लोड करना है तो मैं इस बात पर विचार करूंगा कि बहुत सारे ओवरहेड।
स्क्यूलिफ

1
@ doug65536 वास्तव में यह दूसरा तरीका है। =)
युकिओ फुकुजावा

जवाबों:


177

यह एक ऑपरेशन स्थापित करने के लिए आवश्यक संसाधन हैं। यह असंबंधित लग सकता है, लेकिन आवश्यक है।

यह ऐसा है जब आपको कहीं जाने की आवश्यकता है, आपको कार की आवश्यकता हो सकती है। लेकिन, सड़क पर गाड़ी चलाने के लिए कार पकड़ना भारी पड़ जाएगा, इसलिए आप चलना चाहते हैं। हालांकि, ओवरहेड इसके लायक होगा यदि आप देश भर में जा रहे हैं।

कंप्यूटर विज्ञान में, कभी-कभी हम सड़क के नीचे जाने के लिए कारों का उपयोग करते हैं क्योंकि हमारे पास बेहतर रास्ता नहीं है, या यह "चलने के लिए सीखने" के लिए हमारे समय के लायक नहीं है।


84
एक समान उपमा उड़ रही होगी। योजनाएं कारों की तुलना में बहुत तेज हैं, लेकिन हवाई अड्डे के चेक-इन, सुरक्षा, आदि का ओवरहेड कारों को छोटी दूरी के लिए बेहतर विकल्प बनाता है।
फोगबर्ड

s / ड्राइव / जाना / (यदि आपको कहीं ड्राइव करने की आवश्यकता है तो आप आमतौर पर चलने का निर्णय नहीं लेते ...
RCIX

1
@ inf3rno विडंबना? हम अपनी कार तक कैसे पहुंचेंगे? हम चलते हैं। और हम पूरी तरह से ... अपनी कार तक चल सकते हैं। हम अपनी मंजिल तक नहीं जा सकते, भले ही वह हमारी कार से ज्यादा नजदीक हो।
corsiKa

अगर मैं यह कहूं कि मैं कम ओवरहेड जावा कोड लिखता हूं, तो आप कैसे व्याख्या करेंगे कि "एक ऑपरेशन स्थापित करने के लिए आवश्यक संसाधन" की परिभाषा के संदर्भ में। मेरे कोड को बहुत सेटअप की आवश्यकता नहीं है?
committedandroider

ठीक है, आपको कंप्यूटर या सर्वर को चालू करना होगा, आपको ऑपरेटिंग सिस्टम और सभी ड्राइवरों को लोड करना होगा, आपको जावा प्रक्रिया को फायर करना होगा, आपको जेवीएम को चालू करना होगा, आपको अपनी सभी कक्षाओं को लोड करना होगा, IO बफ़र को कंसोल पर सिंक्रनाइज़ करना होगा ताकि आप अपनी "हैलो वर्ल्ड" कर सकें। लेकिन कृपया, मुझे कम ओवरहेड कोडिंग के बारे में अधिक बताएं।
corsiKa

40

शब्द का अर्थ संदर्भ के साथ बहुत भिन्न हो सकता है। सामान्य तौर पर, यह संसाधन (सबसे अधिक बार मेमोरी और सीपीयू समय) का उपयोग किया जाता है, जो सीधे इच्छित परिणाम में योगदान नहीं करते हैं, लेकिन उपयोग की जाने वाली तकनीक या विधि द्वारा आवश्यक हैं। उदाहरण:

  • प्रोटोकॉल ओवरहेड : ईथरनेट फ्रेम, आईपी पैकेट और टीसीपी सेगमेंट में सभी हेडर हैं, टीसीपी कनेक्शन के लिए हैंडशेक पैकेट की आवश्यकता होती है। इस प्रकार, आप संपूर्ण बैंडविड्थ का उपयोग नहीं कर सकते हैं हार्डवेयर आपके वास्तविक डेटा के लिए सक्षम है। आप बड़े पैकेट आकार का उपयोग करके ओवरहेड को कम कर सकते हैं और यूडीपी का एक छोटा हेडर और कोई हैंडशेक नहीं है।
  • डेटा संरचना मेमोरी ओवरहेड : एक लिंक की गई सूची में प्रत्येक तत्व के लिए कम से कम एक सूचक की आवश्यकता होती है। यदि तत्व एक पॉइंटर के आकार के समान हैं, तो इसका मतलब 50% मेमोरी ओवरहेड है, जबकि एक सरणी में संभावित रूप से 0% ओवरहेड हो सकता है।
  • विधि कॉल ओवरहेड : एक अच्छी तरह से डिज़ाइन किया गया कार्यक्रम बहुत सारे छोटे तरीकों में टूट गया है। लेकिन प्रत्येक मेथड कॉल के लिए स्टैक फ्रेम सेट करने, मापदंडों की प्रतिलिपि बनाने और रिटर्न एड्रेस की आवश्यकता होती है। यह एक प्रोग्राम की तुलना में सीपीयू ओवरहेड का प्रतिनिधित्व करता है जो एक एकल अखंड फ़ंक्शन में सब कुछ करता है। बेशक, जोड़ा हुआ स्थायित्व इसे बहुत अधिक मूल्य देता है, लेकिन कुछ मामलों में, अत्यधिक विधि कॉल का एक महत्वपूर्ण प्रदर्शन प्रभाव हो सकता है।

लगता है जैसे शब्द का उन सभी उदाहरणों में एक ही अर्थ है (कार्य को निष्पादित करने के लिए आवश्यक है, लेकिन हमेशा इसे सीधे करने से संबंधित नहीं है)
RCIX

डेटा संरचना मेमोरी ओवरहेड: अधिकांश मेमोरी आवंटनकर्ताओं के साथ, यह उससे भी बदतर है। द्वारा लौटाए गए प्रत्येक मान mallocमें ब्लॉक प्लस गार्ड मानों के आकार के आबंटक (क्लासिक 32-बिट मशीन मानकर) के कारण 8 बाइट्स का एक निर्मित ओवरहेड है। और इससे पहले कि आप आवंटन की ग्रैन्युलैरिटी के बारे में भी सोचें। इसलिए सरल 4-बाइट पूर्णांकों की एक एकल-लिंक की गई सूची में 75% का ओवरहेड होगा; सरणियाँ बहुत बेहतर होती हैं (जब तक कि आपको बीच में तेज़ प्रविष्टि की आवश्यकता नहीं होती है) क्योंकि वे ओवरहेड एक बार (या कम, अगर सरणी गतिशील रूप से आवंटित नहीं होती हैं) हो सकती हैं।
डोनल फेलो

19

आप थके हुए हैं और कोई और काम नहीं कर सकते। आप खाना खाते हैं। ऊर्जा भोजन की तलाश में, इसे प्राप्त करने और वास्तव में इसे खाने से ऊर्जा की खपत होती है और ओवरहेड होती है!

किसी कार्य को पूरा करने के लिए ओवरहेड कुछ बर्बाद हो जाता है। ओवरहेड को बहुत छोटा बनाने का लक्ष्य है।

कंप्यूटर विज्ञान में कहा गया है कि आप एक नंबर प्रिंट करना चाहते हैं, जो आपके काम को पूरा करता है। लेकिन संख्या को संग्रहीत करना, इसे प्रिंट करने के लिए डिस्प्ले सेट करना और इसे प्रिंट करने के लिए रूटीन को कॉल करना, फिर चर से संख्या तक पहुंचना सभी उपरी है।


17

विकिपीडिया ने हमें कवर किया है :

कंप्यूटर विज्ञान में, ओवरहेड को आम तौर पर अतिरिक्त या अप्रत्यक्ष गणना समय, मेमोरी, बैंडविड्थ या अन्य संसाधनों के संयोजन के रूप में माना जाता है जो किसी विशेष लक्ष्य को प्राप्त करने के लिए आवश्यक होते हैं। यह इंजीनियरिंग ओवरहेड का एक विशेष मामला है।


4
लेकिन अगर ऐसा नहीं होता, तो आप विकीपीडिया को ठीक कर देंगे, और फिर उसी पोस्ट को यहां बना देंगे।
सैम्यूडी

11

ओवरहेड आमतौर पर अतिरिक्त प्रोग्रामिंग (मेमोरी, प्रोसेसर, समय, आदि) की मात्रा का पुनरावर्तन करता है जो विभिन्न प्रोग्रामिंग एल्गोरिदम लेते हैं।

उदाहरण के लिए, एक संतुलित बाइनरी ट्री में डालने का ओवरहेड एक साधारण लिंक्ड लिस्ट में एक ही इंसर्ट की तुलना में बहुत बड़ा हो सकता है (इंसर्ट को अधिक समय लगेगा, ट्री को संतुलित करने के लिए अधिक प्रोसेसिंग पावर का उपयोग करना होगा, जिसके परिणामस्वरूप लंबे समय तक चलने वाले ऑपरेशन समय में परिणाम होगा उपभोक्ता)।


5

एक प्रोग्रामर ओवरहेड के लिए उन सिस्टम संसाधनों को संदर्भित करता है जो आपके कोड द्वारा उपभोग किए जाने पर इनपुट डेटा के दिए गए सेट पर प्लेटफॉर्म पर चल रहे हैं। आमतौर पर इस शब्द का उपयोग विभिन्न कार्यान्वयन या संभावित कार्यान्वयन की तुलना करने के संदर्भ में किया जाता है।

उदाहरण के लिए, हम कह सकते हैं कि एक विशेष दृष्टिकोण काफी सीपीयू ओवरहेड को उकसा सकता है, जबकि एक और अधिक मेमोरी ओवरहेड को उकसा सकता है और फिर भी एक और नेटवर्क ओवरहेड (और उदाहरण के लिए, एक बाहरी निर्भरता प्राप्त करने के लिए) भारित हो सकता है।

आइए एक विशिष्ट उदाहरण दें: संख्याओं के समूह के औसत (अंकगणितीय माध्य) की गणना करें।

स्पष्ट दृष्टिकोण इनपुट पर लूप करना है, एक चालू कुल और एक गिनती रखते हुए। जब अंतिम संख्या का सामना करना पड़ता है ("फाइल का अंत" ईओएफ, या कुछ प्रहरी मूल्य, या कुछ जीयूआई बटोम, जो भी हो) द्वारा संकेत दिया जाता है, तो हम बस कुल इनपुट की संख्या से विभाजित करते हैं और हम कर रहे हैं।

यह दृष्टिकोण सीपीयू, मेमोरी या अन्य संसाधनों के संदर्भ में लगभग कोई ओवरहेड नहीं है। (यह एक तुच्छ कार्य है)।

एक अन्य संभावित दृष्टिकोण एक सूची में इनपुट को "स्लरप" करना है। राशि की गणना करने के लिए सूची पर पुनरावृति करें, फिर सूची से मान्य वस्तुओं की संख्या से विभाजित करें।

इस दृष्टिकोण की तुलना करके, स्मृति ओवरहेड की मनमानी मात्रा को लागू किया जा सकता है।

एक विशेष खराब कार्यान्वयन में हम पुनरावृत्ति का उपयोग करके राशि संचालन कर सकते हैं लेकिन पूंछ-उन्मूलन के बिना। अब हमारी सूची के लिए मेमोरी ओवरहेड के अलावा, हम स्टैक ओवरहेड (जो कि मेमोरी का एक अलग प्रकार है और अक्सर मेमोरी के अन्य रूपों की तुलना में अधिक सीमित संसाधन है) का परिचय दे रहे हैं।

अभी तक एक और (यकीनन ज्यादा बेतुका) दृष्टिकोण आरडीबीएमएस में कुछ एसक्यूएल टेबल के सभी इनपुट को पोस्ट करना होगा। फिर बस उस टेबल के कॉलम पर SQL SUM फ़ंक्शन को कॉल करना। यह हमारे स्थानीय मेमोरी ओवरहेड को किसी अन्य सर्वर पर स्थानांतरित करता है, और हमारे निष्पादन पर नेटवर्क ओवरहेड और बाहरी निर्भरता को बढ़ाता है। (ध्यान दें कि रिमोट सर्वर में इस कार्य से जुड़ी कोई विशेष मेमोरी ओवरहेड नहीं हो सकती है --- यह स्टोरेज के सभी मानों को तुरंत स्टोर कर सकता है, उदाहरण के लिए)।

Hypothetically किसी प्रकार के क्लस्टर पर एक कार्यान्वयन पर विचार कर सकते हैं (संभवतः मूल्यों के अरबों के औसत को संभव बनाने के लिए)। इस मामले में किसी भी आवश्यक एन्कोडिंग और मूल्यों के वितरण (नोड्स के लिए उन्हें मैप करना) और परिणामों के संग्रह / टकराव (कमी) को ओवरहेड के रूप में गिना जाएगा।

हम प्रोग्रामर के स्वयं के कोड से परे कारकों द्वारा किए गए ओवरहेड के बारे में भी बात कर सकते हैं। उदाहरण के लिए 32 या 64 बिट प्रोसेसर के लिए कुछ कोड का संकलन एक पुराने 8-बिट या 16-बिट आर्किटेक्चर के लिए एक से अधिक ओवरहेड को उलझा सकता है। इसमें बड़ी मेमोरी ओवरहेड (संरेखण मुद्दे) या सीपीयू ओवरहेड शामिल हो सकते हैं (जहां सीपीयू को बिट ऑर्डर करने या गैर-संरेखित निर्देशों आदि का उपयोग करने के लिए मजबूर किया जाता है) या दोनों।

ध्यान दें कि आपके कोड द्वारा उठाए गए डिस्क स्थान और यह पुस्तकालयों, आदि को आमतौर पर "ओवरहेड" के रूप में संदर्भित नहीं किया जाता है, बल्कि इसे "पदचिह्न" कहा जाता है। साथ ही आपके प्रोग्राम की खपत (किसी भी डेटा सेट के बारे में जानकारी के बिना) बेस मेमोरी को इसका "पदचिह्न" कहा जाता है।


3

ओवरहेड बस कार्यक्रम निष्पादन में अधिक समय लेने वाला है। उदाहरण ; जब हम किसी फ़ंक्शन को कॉल करते हैं और उसका नियंत्रण पास किया जाता है, जहां उसे परिभाषित किया जाता है और फिर उसके शरीर को निष्पादित किया जाता है, इसका मतलब है कि हम अपने सीपीयू को एक लंबी प्रक्रिया से चलाने के लिए बनाते हैं (पहले नियंत्रण को स्मृति में अन्य स्थान पर भेजते हैं और फिर वहां निष्पादित करते हैं और फिर नियंत्रण वापस पूर्व स्थिति में दे रहा है), फलस्वरूप इसमें बहुत अधिक समय लगता है, इसलिए ओवरहेड। हमारा लक्ष्य फ़ंक्शन परिभाषा और कॉलिंग समय के दौरान इनलाइन का उपयोग करके इस ओवरहेड को कम करना है, जो फ़ंक्शन कॉल में फ़ंक्शन की सामग्री की प्रतिलिपि बनाता है इसलिए हम नियंत्रण को किसी अन्य स्थान पर नहीं भेजते हैं, लेकिन एक पंक्ति में हमारे कार्यक्रम को जारी रखते हैं, इसलिए इनलाइन ।


2

आप एक शब्दकोश का उपयोग कर सकते हैं। परिभाषा वही है। लेकिन आपको समय बचाने के लिए, ओवरहेड उत्पादक कार्य करने के लिए आवश्यक कार्य है। उदाहरण के लिए, एक एल्गोरिथ्म चलता है और उपयोगी काम करता है, लेकिन इसके काम करने के लिए मेमोरी की आवश्यकता होती है। यह मेमोरी आवंटन में समय लगता है, और यह सीधे काम से संबंधित नहीं है, इसलिए ओवरहेड है।


1

आप विकिपीडिया की जाँच कर सकते हैं । लेकिन मुख्य रूप से जब अधिक कार्यों या संसाधनों का उपयोग किया जाता है। जैसे अगर आप .NET से परिचित हैं तो आपके पास वैल्यू टाइप और रेफरेंस टाइप हो सकते हैं। संदर्भ प्रकारों में मेमोरी ओवरहेड होती है क्योंकि उन्हें मूल्य प्रकारों की तुलना में अधिक मेमोरी की आवश्यकता होती है।


1

ओवरहेड का एक ठोस उदाहरण "स्थानीय" प्रक्रिया कॉल और "दूरस्थ" प्रक्रिया कॉल के बीच का अंतर है।

उदाहरण के लिए, क्लासिक RPC (और EJB जैसे कई अन्य दूरस्थ फ्रेमवर्क) के साथ, एक फ़ंक्शन या मेथड कॉल एक कोडर के समान दिखता है, चाहे वह एक स्थानीय हो, मेमोरी कॉल में, या एक वितरित, नेटवर्क कॉल।

उदाहरण के लिए:

service.function(param1, param2);

क्या यह एक सामान्य विधि है, या कोई दूरस्थ विधि है? आप यहां जो देख रहे हैं, उससे आप नहीं बता सकते।

लेकिन आप सोच सकते हैं कि दो कॉल के बीच निष्पादन के समय में अंतर नाटकीय है।

इसलिए, जबकि कोर कार्यान्वयन "समान लागत" होगा, इसमें शामिल "ओवरहेड" काफी अलग है।


1

थ्रेड्स को प्रबंधित करने और उनके बीच समन्वय करने के लिए आवश्यक समय के साथ ओवरहेड के बारे में सोचें। यह एक बोझ है यदि धागे के पास करने के लिए पर्याप्त कार्य नहीं है। ऐसे में ओवरहेड कॉस्ट ओवर थ्रेडिंग के जरिए सेव्ड टाइम पर आ जाती है और कोड अनुक्रमिक से अधिक समय लेता है।


हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.