2010-01-07 21 views
36

हमें बताया गया है कि Google क्रोम प्रत्येक टैब को एक अलग प्रक्रिया में चलाता है। इसलिए एक टैब में एक क्रैश अन्य टैब में समस्या नहीं पैदा करेगा।एक ही एप्लिकेशन की तरह दिखने के दौरान Google Chrome अलग प्रक्रियाओं में टैब को अलग कैसे कर सकता है?

AFAIK, बहु-प्रक्रियाएं ज्यादातर जीयूआई के बिना कार्यक्रमों में उपयोग की जाती हैं। मैंने कभी भी ऐसी तकनीक नहीं पढ़ी है जो एकाधिक जीयूआई प्रक्रियाओं को एक ही में एम्बेड कर सकती है।

क्रोम ऐसा कैसे करता है?

मैं इस सवाल से पूछ रहा हूं क्योंकि मैं सीसीटीवी सॉफ्टवेयर तैयार कर रहा हूं जो कई कैमरे के विनिर्माण से वीडियो डिकोडिंग एसडीके का उपयोग करेगा, जिनमें से कुछ स्थिर से बहुत दूर हैं। इसलिए मैं इन एसडीके को विभिन्न प्रक्रियाओं में चलाने के लिए पसंद करता हूं, जो मैंने सोचा था कि क्रोम के समान है।

+1

स्रोत डाउनलोड करें और देखें! यदि आपको एक समान समाधान की आवश्यकता है तो यह आपके लिए बहुत बड़ा लाभ होगा। Google क्रोम खुला स्रोत है। – Conor

+0

क्रोमियम स्रोत का मेरा चेकआउट 19.7 जीबी और 545,764 फाइल है। [ऊपर दिए गए लिंक] [http://dev.chromium.org/developers/design-documents/process-models) के माध्यम से जाने के लिए बहुत तेज़ हो जाएगा! –

उत्तर

42

असल में, वे एक और प्रक्रिया का उपयोग करते हैं जो उन्हें सभी को एक साथ जीयूआई में चिपकाता है।

Google क्रोम तीन अलग-अलग प्रकार की प्रक्रियाएं बनाता है: ब्राउज़र, प्रस्तुतकर्ता, और प्लग-इन।

ब्राउज़र: केवल एक ब्राउज़र प्रक्रिया है, जो ब्राउज़र के टैब, विंडोज़ और "क्रोम" का प्रबंधन करती है। यह प्रक्रिया डिस्क, नेटवर्क, उपयोगकर्ता इनपुट और डिस्प्ले के साथ सभी इंटरैक्शन को भी संभालती है, लेकिन यह वेब से किसी भी सामग्री को पार्स या प्रस्तुत करने का कोई प्रयास नहीं करती है।

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

प्लग-इन: ब्राउज़र प्रक्रिया फ्लैश, क्विकटाइम या एडोब रीडर जैसे प्रत्येक प्रकार के प्लग-इन के लिए एक प्रक्रिया भी बनाती है। इन प्रक्रियाओं में केवल कुछ गोंद कोड के साथ प्लग-इन होते हैं ताकि उन्हें ब्राउज़र और प्रस्तुतकर्ताओं से बातचीत कर सकें।

स्रोत: Chromium Blog: Multi-process Architecture

+1

मुझे यह नहीं मिला। ऐसा लगता है कि ये टैब ब्राउज़र प्रक्रिया से संबंधित हैं, ये टैब पर चित्रों और पाठ को कैसे खींच सकता है, दूसरी प्रक्रिया से संबंधित है? – ablmf

+4

वे ब्राउज़र प्रक्रिया से संबंधित नहीं हैं। ब्राउज़र प्रक्रिया बस उन्हें प्रबंधित करती है (यह उन्हें बनाता है, उन्हें रोकता है, और उन पर नज़र रखता है)।ब्राउज़र प्रक्रिया ब्राउज़र जीयूआई भी बनाती है, लेकिन टैब के आंतरिक तर्क (खतरनाक भाग जो क्रैश के लिए कमजोर है) को अलग रेंडरर प्रक्रियाओं (प्रत्येक टैब के लिए एक) द्वारा नियंत्रित किया जाता है। –

+1

ग्रेट सारांश! जोड़ने के लिए एक बात, प्रत्येक क्रोम एक्सटेंशन अपनी प्रक्रिया में चलता है। यदि आप जानना चाहते हैं कि प्रक्रियाएं एक दूसरे से कैसे बात करती हैं, तो क्रोमियम स्रोत बेस में आईपीसी अनुभाग देखें। –

0

एक वेब पेज रेंडर करने का कार्य के अधिकांश जहां वास्तव में चीजों को जाना पता लगाना है (अर्थात जहां प्रत्येक चित्र जगह, क्या रंग पाठ के प्रत्येक टुकड़े रेंडर करने के लिए)। यह काम एक अलग प्रक्रिया में किया जाता है। एक बार अलग प्रक्रिया को पता चला है कि सब कुछ कहाँ जाता है, यह उस जानकारी को मुख्य क्रोम प्रक्रिया पर भेजता है जो स्क्रीन पर सभी तत्वों को आकर्षित करता है।

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

+1

आपके पहले पैराग्राफ के बारे में, मुझे एहसास है कि क्रोम ऐसा नहीं कर रहा है, लेकिन तकनीक ओएलई के समान नहीं है। आपके पास वर्ड दस्तावेज़ में एक एम्बेडेड एक्सेल दस्तावेज़ है। आप Word में स्प्रेडशीट पर राइट-क्लिक करके और ओपन का चयन करके एक्सेल लॉन्च करते हैं। दस्तावेज़ को एक अलग प्रक्रिया में संपादित करने के लिए एक्सेल प्रक्रिया लॉन्च की गई है। अब, यदि आप एक्सेल में कुछ टाइप करते हैं, तो आप इसे रीयल-टाइम में वर्ड साइड पर बदल देंगे। जिस तरह से यह काम करता है वह यह है कि वर्ड के अंदर एक एक्सेल विशिष्ट रेंडरर चल रहा है जो डेटा को आकर्षित करने के लिए इंटर-प्रोसेस (COM IDataObject का उपयोग करके) से बात करता है। – zumalifeguard

+1

ओएलई एक दूरस्थ प्रक्रिया कॉल (आरपीसी) वास्तुकला है। आरपीसी वास्तव में एक ही मशीन पर एक दूसरे के साथ संवाद करने के लिए दो प्रक्रियाओं का एक तरीका है (हालांकि पिछले कुछ वर्षों में यह पक्षपात से बाहर हो गया है)। – speedplane

16

चूंकि यह एक डेवलपर साइट है, यह अजीब बात है कि Design Documents से कोई भी विशेष रूप से Multi-process Architecture अनुभाग से लिंक नहीं हुआ है।

यहाँ वास्तु सिंहावलोकन है:

Architectural overview of browser threads

-2

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

+0

प्रत्येक एचडब्ल्यूएनडी एक विशेष प्रक्रिया से संबंधित है – zumalifeguard

+0

@ ज़ूमा जो मैंने लिखा है उसके विपरीत नहीं है। – Tobu

0

मैं सिर्फ पहले उत्तर (एक 'ब्राउज़र' समझा बनाम बनाम 'प्लग इन' एक इजाफा ... कि सबसे पूर्ण लगता है और मेरे लिए अच्छा समझ में आता है 'दाता' केवल एक चीज दे दी है।

मैं जोड़ूंगा कि Google के डिज़ाइन इस तरह से कुछ और टिप्पणियां हैं, और यह एक राय दें कि यह हमेशा मेरी पहली पसंद एक समग्र/हर दिन ब्राउज़र के लिए क्यों रहा है। (मुझे पता है कि कैसे (और क्यों नहीं) प्रश्न पूछा जा रहा था।)

डिज़ाइनिंग ताकि अलग-अलग घटकों के कोड अलग-अलग प्रक्रियाओं में हो सकें प्रत्येक को स्पष्ट रूप से डिज़ाइन किए गए तरीकों से संशोधित करने के लिए आकस्मिक रूप से (या उद्देश्य पर) ओएस से 'स्मृति-रक्षा' प्रक्रियाओं को अन्य तरीकों से संशोधित करता है।

इस तरह की डिजाइन में केवल भागों है कि दोनों पढ़ सकते हैं और साझा डेटा लिख ​​सकते हैं उन भागों है कि उस डेटा का उपयोग करने की जरूरत करने के लिए तैयार कर रहे हैं कर रहे हैं, और क्या का उपयोग है कि बस का उपयोग 'पढ़ा' है या 'पढ़ा पर नियंत्रण की अनुमति देता है 'और' लिखें 'एक्सेस इत्यादि। और, के बाद से उन एक्सेस नियंत्रण हार्डवेयर में लागू किए जाते हैं, वे फर्म गारंटी हैं कि एक्सेस नियमों का उल्लंघन नहीं किया जा सकता है। इस प्रकार, अलग-अलग टैब/प्रक्रियाओं में चल रहे अन्य लेखकों और कंपनियों से प्लगइन और एक्सटेंशन , एक दूसरे को तोड़ नहीं सकते हैं।

इस तरह के एक डिज़ाइन का प्रभाव यह है कि यह को बदलने के लिए कुछ कोड या डेटा बदलने की संभावना को कम करता है जिसे बदलने के लिए डिज़ाइन नहीं किया गया था। यह सुरक्षा कारणों के लिए है और अधिक विश्वसनीय, कम छोटी गाड़ी कोड बनाता है।

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

लेकिन, रोज़ाना समग्र ब्राउज़र उपयोग के लिए, लगभग सभी कार्यों के लिए, क्रोम ब्राउज़र मेरी पहली पसंद बन गया है। (बस मेरी राय, और निश्चित रूप से, वाईएमएमवी।)