जावास्क्रिप्ट मल्टी थ्रेडिंग


10

खैर इन दिनों जावास्क्रिप्ट सभी वेब विकास तकनीकों में मुख्य खिलाड़ी है, यूजर इंटरफेस बेहतर बनाने के लिए क्लाइंट की तरफ, क्लाइंट साइड लॉजिक, सर्वर साइड लॉजिक के रूप में कुछ वेब सर्वर पर भी।

लोगों के इस तथ्य को जोड़ें (उनमें से कम से कम कुछ) फ्लैश से जावास्क्रिप्ट और एचटीएमएल 5 के लिए वेब गेम के विकास में आगे बढ़ना शुरू कर दिया

क्या यह मल्टी थ्रेडिंग का समर्थन करने का समय नहीं है! क्या ऐसे ब्राउज़र हैं जो जावास्क्रिप्ट को बहु थ्रेडेड होने की अनुमति देते हैं या यह किसी भी मानकों, एचटीएमएल 5 या भविष्य के संस्करणों में है!


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

जवाबों:


9

मल्टी थ्रेडिंग एक्मास्क्रिप्ट में नहीं की जाएगी, लेकिन मेजबान वातावरण में उजागर की जा सकती है।

क्लासिक उदाहरण वेबवर्कर्स हैं जो आपको एक पृष्ठभूमि कार्यकर्ता को काम करने और <iframe>नई प्रक्रियाओं को फैलाने के तरीके के रूप में दुरुपयोग करने की अनुमति देता है।

यह ध्यान दिया जाना चाहिए कि जावास्क्रिप्ट में मल्टी थ्रेडिंग की आवश्यकता नहीं है (अपवाद हैं, मुख्य रूप से ग्राफिक्स संबंधित कार्यक्रम)। आपको कई थ्रेड्स की आवश्यकता नहीं है, आपके पास पहले से ही अपने GUI के लिए एक इवेंट लूप है और आपके ग्राफिक्स रेंडरिंग (कैनवास) हार्डवेयर त्वरित है (मतलब GPU आपके ग्राफिक्स को आपके लिए समानांतर में प्रस्तुत करता है)।

हालांकि वेबक्ल जैसे प्रोजेक्ट काफी रोमांचक हैं।


2
क्या आप इस तथ्य पर विस्तार कर सकते हैं कि इसकी "आवश्यकता नहीं है"? मैं हाल ही में एक उदाहरण में भाग गया था जहाँ डेस्कटॉप प्रोग्रामिंग में प्राकृतिक मामला कार्य को संभालने के लिए एक धागा स्पॉन करने के लिए होगा लेकिन यह स्पष्ट रूप से एक आसान या मानक विकल्प नहीं था। मैंने उस मामले में काम किया, लेकिन एक धागा पैदा करना अधिक सुरुचिपूर्ण समाधान लग रहा था।
रिग

@ आप जिस मामले को संभालने की कोशिश कर रहे थे वह क्या था?
Zachary K

@ रिग एक ठोस उदाहरण देते हैं। कम्प्यूटेशनल रूप से महंगी प्रसंस्करण क्लाइंट साइड जावास्क्रिप्ट में दुर्लभ है
Raynos

@ रेयान कृपया इसकी आवश्यकता के बारे में अधिक बताएं, मैं केवल यह नहीं सोच रहा हूं कि गेम डेवलपमेंट में उदाहरण के लिए अगर ग्राफिक्स पर भारी गणना है और भौतिकी और तर्क फ्रेम दर पर आसानी से प्रभावित होगा यदि कोई मल्टीथ्रेडिंग नहीं है तो मुझे लगता है
अली

@ मैं बाहर नकल किया और कहा कि अपवाद हैं। हालाँकि, हार्डवेयर
हेवी

4

नहीं

मल्टी थ्रेडिंग सही पाने के लिए सॉफ्टवेयर में सबसे कठिन चीजों में से एक है। ऐसे बहुत से कोने मामले हैं जो आपके कोड निर्धारक नहीं होने पर वास्तव में कठिन हैं। (मैं ताले के साथ बहु सूत्रण के बारे में बात कर रहा हूं)। इसके अलावा सभी विभिन्न जावास्क्रिप्ट पुस्तकालयों को इस धारणा पर बनाया गया है कि यह बहु थ्रेडेड नहीं है।

कहा जा रहा है कि ऐसे वेब वर्कर हैं जो आपको मल्टी प्रोसेसिंग प्रकार के ऑपरेशंस करने के लिए एक्टर बेस्ड फ्रेमवर्क देते हैं। आप श्रमिकों को बना सकते हैं और घटनाओं के माध्यम से डेटा को आगे-पीछे कर सकते हैं।

EDIT: दूसरा कारण यह है कि जब जावास्क्रिप्ट बनाया गया था तो यह माना जाता था कि इसे छोटे कार्यों के लिए उपयोग किया जाएगा, इसलिए कोई भी संगामिति नहीं बनाई गई थी। इसे वापस लेने के लिए अब बहुत सारे कोड को तोड़ना होगा। वेब कर्मचारियों को जोड़ने से यह संभव हो गया है कि एक प्रणाली थी जो किसी भी साझा की गई मेमोरी के बिना संगामिति है, लेकिन अभिनेताओं का उपयोग करके, संगामिति का एक मॉडल जिसने खुद को कई अन्य भाषाओं जैसे Erlang, Scala, Cloverure में बहुत मजबूत दिखाया है आदि।

(यदि आप नहीं बता सकते हैं कि मैं वास्तव में ताला आधारित संगति को नापसंद करता हूं)


1
Multi threading is one of the hardest things in software to get right.- मैं बस इस के साथ आश्चर्यचकित! आपके द्वारा उपयोग किया जा रहा ब्राउज़र, आपके डेस्कटॉप का OS, इस पृष्ठ पर काम करने वाला वेब सर्वर - व्यावहारिक रूप से हर एप्लिकेशन जिसे आप रोज़ाना उपयोग करते हैं, वह मल्टीथ्रेडेड है। क्या आप यह जानना चाहते हैं? फिर भी आपको नीचा दिखाने के लिए, लेकिन अगर आप कहेंगेmultithreading is not done because it is hard
दीपन मेहता

3
@DipanMehta बहु सूत्रण है सॉफ्टवेयर में सबसे कठिन चीजों सही पाने के लिए में से एक। उन सभी अनुप्रयोगों का उपयोग करने का कारण यह है कि वे वास्तव में प्रतिभाशाली लोगों
रेयोनोस

@ रयोनोस - मेरी अच्छाई! तो आप मुझे प्रतिभाशाली कह रहे हैं! मैं इसे हर रोज उपयोग करता हूं ... मुझे लगता है कि जब आप सी प्रोग्रामिंग या किसी बड़े पैमाने पर आवेदन करते हैं, तो यह काफी सामान्य है। बिंदु, उपयोग और आवश्यकता के बावजूद, W3C कंसोर्टियम ने वास्तव में इसे जावास्क्रिप्ट के लिए नहीं बख्शा क्योंकि यह बहुत कठिन था !
दीपन मेहता

2
सही और कुशल समानांतर कार्यक्रम लिखना आपके लिए कितना मुश्किल है, यह आपकी गंभीर समझ है। लेकिन मल्टी थ्रेडिंग जावास्क्रिप्ट में नहीं है क्योंकि इसकी अनावश्यक जटिलता (यह बात 3 सप्ताह में लिखी गई थी)
रेयनोस

2
@DipanMehta को सही तरीके से किया गया लॉक आधारित कंसीडर किया जा रहा है, और कोने के सभी मामलों को हल करना एक कठिन समस्या है। उदाहरण के लिए ताले के साथ एक कतार के रूप में सरल के रूप में कुछ का कार्यान्वयन जो सभी मामलों में सही साबित हो सकता है कुछ साल पहले तक एक युवा परिणाम होगा। लेकिन इससे भी महत्वपूर्ण बात यह है कि जिस भाषा में यह नहीं है उस पर फिर से जोर डालने की कोशिश करना मुसीबत के लिए पूछ रहा है।
ज़ाचरी के

3

मल्टीथ्रेडिंग के लिए जावास्क्रिप्ट खोलने से यह हल करने की तुलना में अधिक समस्याएँ पैदा करेगा:

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

जैसे ही आप प्रीमीशन या समानांतर निष्पादन की अनुमति देते हैं, यह सुविधा समाप्त हो जाएगी, इसका मतलब है कि आपको उन डेटा पर लॉक लगाने की आवश्यकता है जिन्हें आप से बचना चाहते हैं, साथ ही दौड़ से बचने के लिए पूरी हार्ड डिबग करना

टाइमआउट का उपयोग करते हुए छद्म समानांतर निष्पादन होना संभव है, इसका मतलब है कि बड़े या लंबे समय तक चलने वाले कार्यों को परमाणु विखंडू में विभाजित करना और setTimeout(function(){nextstep(args);},1);जरूरत पड़ने पर अन्य सामानों का उपयोग करना।


0

इंटेल ने कुछ समय पहले रिवर ट्रेल रिलीज़ किया , जो जावास्क्रिप्ट में समानांतर प्रोग्रामिंग को सक्षम करता है। हालाँकि, यह फ़ायरफ़ॉक्स-ओनली प्लगइन है और मैंने रोडमैप के बारे में नहीं सुना है जो इस तकनीक को W3C में लाता है, बहुत कम ECMA।

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