জাভাস্ক্রিপ্ট মাল্টিথ্রেডিং সমর্থন করে না কেন?


269

এটি কি ইচ্ছাকৃত ডিজাইনের সিদ্ধান্ত বা আমাদের বর্তমান দিনের ব্রাউজারগুলির একটি সমস্যা যা আসন্ন সংস্করণগুলিতে সংশোধন করা হবে?


3
ওয়েব কর্মী / কর্মী থ্রেড সম্পর্কে তথ্যের জন্য জাভাস্ক্রিপ্ট এবং থ্রেডস প্রশ্নের উত্তরও দেখুন ।
স্যাম হাসলার

115
হ্যালো, সহকর্মী গুগল আপনি লক্ষ্য করতে পারেন যে এখানে সমস্ত কিছু বেশ তারিখযুক্ত বলে মনে হচ্ছে (এই প্রশ্নটি 5 বছর আগে জিজ্ঞাসা করা হয়েছিল নোট করুন)) যেহেতু এটি জিজ্ঞাসা করা হয়েছিল, ওয়েব ব্রাউজারগুলি কিছু ক্ষমতা অর্জন করেছে যা আমি যতদূর বলতে পারি, কম-বেশি মাল্টিথ্রেডিং। ওয়েব কর্মীদের এক নজরে দেখুন: msdn.microsoft.com/en-us/hh549259.aspx
আর্টঅফ ওয়ারফেয়ার

2
Multithread.js ওয়েব কর্মীদের মোড়ানো এবং জেএসে সহজ মাল্টিথ্রেডিংয়ের অনুমতি দেয়। আইওএস সাফারি সহ সমস্ত নতুন ব্রাউজারে কাজ করে। :)
KW

উত্তর:


194

জাভাস্ক্রিপ্ট মাল্টি-থ্রেডিং সমর্থন করে না কারণ ব্রাউজারে জাভাস্ক্রিপ্ট ইন্টারপ্রেটার একক থ্রেড (এএফএআইকি)। এমনকি গুগল ক্রোম একক ওয়েব পৃষ্ঠার জাভাস্ক্রিপ্ট একযোগে চলতে দেয় না কারণ এটি বিদ্যমান ওয়েব পৃষ্ঠাগুলিতে প্রচুর সম্মিলিত সমস্যার কারণ হতে পারে। সমস্ত ক্রোম হ'ল পৃথক প্রক্রিয়াগুলিতে একাধিক উপাদান (বিভিন্ন ট্যাব, প্লাগইনস, ইত্যাদি) আলাদা করা যায়, তবে আমি একক পৃষ্ঠাতে একাধিক জাভাস্ক্রিপ্ট থ্রেড ধারণ করতে পারি না।

যাইহোক আপনি setTimeoutকিছু ধরণের শিডিয়ুলিং এবং "জাল" সম্মিলনের অনুমতি দেওয়ার জন্য প্রস্তাবিত হিসাবে ব্যবহার করতে পারেন । এর ফলে ব্রাউজারটি রেন্ডারিং থ্রেডের নিয়ন্ত্রণ আবার ফিরে পেতে এবং জাভাস্ক্রিপ্ট কোড সরবরাহ করা setTimeoutমিলিসেকেন্ডের প্রদত্ত সংখ্যার পরে শুরু করে । এটি খুব কার্যকর যদি আপনি ভিউপোর্টকে (যা দেখছেন) এতে অপারেশন করার সময় তাজা করার অনুমতি দিতে চান। উদাহরণস্বরূপ স্থানাঙ্কগুলির মধ্য দিয়ে লুপিং করা এবং তদনুসারে একটি উপাদান আপডেট করা আপনাকে শুরু এবং শেষের অবস্থানগুলি এবং এর মধ্যে কিছুই দেখতে দেয়।

আমরা জাভাস্ক্রিপ্টে একটি বিমূর্ত গ্রন্থাগার ব্যবহার করি যা আমাদের প্রক্রিয়া এবং থ্রেড তৈরি করতে দেয় যা সমস্ত একই জাভাস্ক্রিপ্ট দোভাষী দ্বারা পরিচালিত হয়। এটি আমাদের নিম্নলিখিত পদ্ধতিতে ক্রিয়া চালাতে সহায়তা করে:

  • প্রক্রিয়া এ, থ্রেড 1
  • প্রক্রিয়া এ, থ্রেড 2
  • প্রক্রিয়া বি, থ্রেড 1
  • প্রক্রিয়া এ, থ্রেড 3
  • প্রক্রিয়া এ, থ্রেড 4
  • প্রক্রিয়া বি, থ্রেড 2
  • বিরতি প্রক্রিয়া এ
  • প্রক্রিয়া বি, থ্রেড 3
  • প্রক্রিয়া বি, থ্রেড 4
  • প্রক্রিয়া বি, থ্রেড 5
  • প্রক্রিয়া শুরু করুন এ
  • প্রক্রিয়া এ, থ্রেড 5

এটি কিছু সূচি নির্ধারণ করে এবং সামঞ্জস্যকে জাল করে, থ্রেড শুরু করে এবং বন্ধ করে দেয়, ইত্যাদি, তবে এটি সত্য মাল্টি-থ্রেডিং হবে না। আমি মনে করি না যে এটি কখনই ভাষাতেই প্রয়োগ করা হবে, যেহেতু সত্যিকারের মাল্টি-থ্রেডিং কেবল তখনই কার্যকর যখন ব্রাউজারটি একটি পৃষ্ঠায় একাধিক থ্রেডযুক্ত (বা একাধিক কোর )ও চালাতে পারে এবং সেখানে সমস্যাগুলি আরও বড়তর হয় অতিরিক্ত সম্ভাবনার চেয়ে।

জাভাস্ক্রিপ্টের ভবিষ্যতের জন্য, এটি দেখুন: https://developer.mozilla.org/preferencesations/xtech2006/javascript/


73
আমি মনে করি বাস্তবায়িত হয় না খুব একটা দৃষ্টি সংকীর্ণ। আমি গ্যারান্টি দিচ্ছি যে ওয়েব অ্যাপ্লিকেশনগুলি শেষ পর্যন্ত সত্যিকারের মাল্টিথ্রেড হতে সক্ষম হবে (এটি কেবল যুক্তিযুক্ত, যেহেতু ওয়েব অ্যাপ্লিকেশনগুলি আরও প্রভাবশালী হয়ে ওঠে এবং হার্ডওয়্যার আরও সমান্তরাল হয়ে ওঠে), এবং আমি এটি দেখতে পাচ্ছি, যেহেতু জাভাস্ক্রিপ্ট ওয়েব বিকাশের ডি-ফ্যাক্টো ভাষা, শেষ পর্যন্ত মাল্টিথ্রেডিং সমর্থন করতে হবে বা এমন কিছু দ্বারা প্রতিস্থাপন করা হবে।
ডিভাইস 1

6
কখনও কখনও খুব বেশি সাহসী বক্তব্য দেওয়া যায় না :) তবে আমি এখনও মনে করি সত্য মাল্টিথ্রেডেড জাভাস্ক্রিপ্টের সুবিধাগুলি অদূর ভবিষ্যতে সম্ভব নয়;)
কামিল ওয়ানরোয়েজ

5
যদিও আমি তর্ক করব যে ওয়েব কর্মীরা থ্রেড-মডেলের চেয়ে প্রসেস-মডেলের মাধ্যমে আরও একযোগে থাকেন। ওয়েব কর্মীরা যোগাযোগের মাধ্যম হিসাবে বার্তা প্রেরণ ব্যবহার করে যা বহুবিধ অ্যাপ্লিকেশনগুলিতে 'স্বাভাবিক' সম্মতি সংক্রান্ত ইস্যুগুলির মার্জিত সমাধান। আমি নিশ্চিত নই যে তারা প্রকৃতপক্ষে একই পৃষ্ঠায় একই পৃষ্ঠায় কাজ করতে পারে কিনা। আমার জানা মতে তারা ডোম অ্যাক্সেস করতে পারে না। এর বেশিরভাগটি শব্দার্থবিজ্ঞান হলেও, ওয়েব কর্মীরা সমস্ত উদ্দেশ্য এবং উদ্দেশ্যগুলির জন্য প্রতিশ্রুতিবদ্ধ দেখায়।
কামিল ওয়ানরুইজ

অসুবিধাগুলি অতিরিক্ত সম্ভাবনার চেয়ে অনেক বড় I'm আমি নিশ্চিত নই যে আপনি সমস্ত অতিরিক্ত সম্ভাবনার কথা ভাবেন। আমি বিশেষত গেমস বা গ্রাফিকাল ভিজ্যুয়ালাইজেশনের মতো ওয়েবগেল ব্যবহৃত হয় এমন ক্ষেত্রে ভাবছি। যেমন গুগল ম্যাপের নতুন 3 ডি সংস্করণ বিবেচনা করুন। অনেকগুলি 3D মডেলযুক্ত শহরগুলিতে আমার পিসির সমস্ত জিনিস লোড করার জন্য 2 মিনিট প্রয়োজন হয় যখন অনেকগুলি ঘর রেন্ডার করতে হয়। নির্দিষ্ট কোণগুলিতে আমার গ্রাফিক্স কার্ড বা আমার নেটওয়ার্ক উভয়ই দক্ষতার সাথে কাজ করছে না। তবে 8 টির মধ্যে 1 টি প্রসেসরের 100% এ রয়েছে। মাল্টিথ্রেডিংও এইচপিএসের ক্ষেত্রে বড় উদ্বেগ যেমন এই উদাহরণটি দেখায়: youtube.com/watch?v=sJ2p982cZFc
সিন্ডিক্স

25

জাভাস্ক্রিপ্ট মাল্টি থ্রেডিং (কিছু সীমাবদ্ধতা সহ) এখানে। গুগল গিয়ার্সের জন্য কর্মী বাস্তবায়িত করেছে এবং এইচটিএমএল 5 এর সাথে শ্রমিকদের অন্তর্ভুক্ত করা হচ্ছে। বেশিরভাগ ব্রাউজার ইতিমধ্যে এই বৈশিষ্ট্যের জন্য সমর্থন যোগ করেছে।

ডেটা থ্রেড-সুরক্ষা গ্যারান্টিযুক্ত কারণ কর্মীর কাছে / থেকে সমস্ত ডেটা যোগাযোগ করা সিরিয়ালযুক্ত / অনুলিপি করা হয়।

আরও তথ্যের জন্য, পড়ুন:

http://www.whatwg.org/specs/web-workers/current-work/

http://ejohn.org/blog/web-workers/


8
তবে এটি মাল্টি-থ্রেডের চেয়ে বহু-প্রক্রিয়া পদ্ধতির চেয়ে বেশি নয়? থ্রেডগুলি একক স্তূপের মধ্যে কাজ করার জন্য পরিচিত।
মৌমাছিদের

1
@ বিফাদার, এটি সত্য। এটি একটি প্রক্রিয়া পদ্ধতির আরও।
নীল

23

Ditionতিহ্যগতভাবে, জেএস সংক্ষিপ্ত, দ্রুত চলমান কোডের টুকরাগুলির জন্য তৈরি হয়েছিল। যদি আপনার বড় গণনা চলতে থাকে তবে আপনি এটি একটি সার্ভারে করেছেন - একটি জেএস + এইচটিএমএল অ্যাপ্লিকেশনটির ধারণা যা আপনার ব্রাউজারে দীর্ঘ সময় ধরে অ-তুচ্ছ বিষয়গুলি চালিয়ে যায়।

অবশ্যই, এখন আমাদের এটি আছে। তবে, ব্রাউজারগুলি ধরতে কিছুটা সময় লাগবে - তাদের বেশিরভাগই একক থ্রেডযুক্ত মডেলের আশেপাশে ডিজাইন করা হয়েছে এবং এটি পরিবর্তন করা সহজ নয়। গুগল গিয়ারগুলি ব্যাকগ্রাউন্ড এক্সিকিউশনটি বিচ্ছিন্ন করে দিয়ে প্রয়োজনীয় সংখ্যক সম্ভাব্য সমস্যাগুলি সাইড-স্টেপ করে - ডিওএম পরিবর্তন করে না (যেহেতু এটি থ্রেড-নিরাপদ নয়), মূল থ্রেড (ডাইটো) দ্বারা তৈরি কোনও অ্যাক্সেসিং অবজেক্ট নেই। সীমাবদ্ধ থাকাকালীন, এটি সম্ভবত অদূর ভবিষ্যতের জন্য সর্বাধিক ব্যবহারিক ডিজাইন, কারণ এটি ব্রাউজারের নকশাটিকে সহজতর করে এবং কারণ এটি অনভিজ্ঞ জেএস কোডারদের সাথে থ্রেডের সাথে জগাখিচু করার অনুমতি দেওয়ার সাথে জড়িত ঝুঁকি হ্রাস করে ...

@মারসিও :

কেন এটি জাভাস্ক্রিপ্টে মাল্টি-থ্রেডিং বাস্তবায়ন না করার কারণ? প্রোগ্রামাররা তাদের কাছে থাকা সরঞ্জামগুলি দিয়ে যা খুশি করতে পারে।

সুতরাং, আসুন তাদের এমন সরঞ্জামগুলি না দিন যা অপব্যবহারের পক্ষে এত সহজ যে আমি খোলার প্রতিটি অন্যান্য ওয়েবসাইট আমার ব্রাউজারটি ক্র্যাশ করে। এটির একটি নিখুঁত বাস্তবায়ন আপনাকে সরাসরি সেই অঞ্চলে নিয়ে আসবে যা আই 7 বিকাশের সময় এমএসকে এত বেশি মাথা ব্যথার কারণ করেছিল: অ্যাড-অন লেখকরা থ্রেডিং মডেলটির সাথে দ্রুত এবং আলগা খেলতেন, ফলস্বরূপ লুকানো বাগগুলি যখন প্রাথমিক থ্রেডে অবজেক্ট লাইফাইকেলগুলি পরিবর্তিত হয় তখন স্পষ্ট হয়ে ওঠে । খারাপ। আপনি যদি IE এর জন্য মাল্টি-থ্রেডেড অ্যাক্টিভ্যাক্স অ্যাড-অনগুলি লেখেন তবে আমার ধারণা এটি অঞ্চলটি নিয়ে আসে; এর অর্থ এই নয় যে এর চেয়ে আরও কিছুদূর যেতে হবে।


6
"এটি অনভিজ্ঞ জেএস কোডারগুলিকে> থ্রেডের সাথে জগাখিচু করার অনুমতি দেওয়ার সাথে জড়িত ঝুঁকি হ্রাস করে" জাভাস্ক্রিপ্টে মাল্টি-থ্রেডিং বাস্তবায়ন না করার কারণ কেন? প্রোগ্রামাররা তাদের কাছে থাকা সরঞ্জামগুলি দিয়ে যা খুশি করতে পারে। যদি এটি ভাল বা খারাপ হয় তবে এটি তাদের সমস্যা। গুগল ক্রোম প্রক্রিয়া মডেলটি দিয়ে এটি অন্যান্য অ্যাপ্লিকেশনগুলিকেও প্রভাবিত করতে পারে না। :)
মারসিও আগুইয়ার

3
@ শোগ 9 - "আসুন [প্রোগ্রামারদের] এমন সরঞ্জামগুলি না দেওয়া যা অপব্যবহার করা এত সহজ যে আমি খোলার প্রতিটি অন্যান্য ওয়েবসাইট আমার ব্রাউজারটি ক্র্যাশ করে শেষ করে দেয়।" - কি? একই যুক্তি অনুসারে কোনও ভাষার মাল্টিথ্রেডিং হওয়া উচিত নয়, কারণ তারা যদি প্রস্তাব দেয় যে আপনি যে সমস্ত প্রোগ্রাম খোলার চেষ্টা করেছেন সেটি ক্রাশ হয়ে যাবে। বাদে এটি সেভাবে কাজ করে না। থ্রেডিং বেশিরভাগ ভাষায় বিদ্যমান এবং বেশিরভাগ নবজাতক প্রোগ্রামার এটিকে স্পর্শ করে না, এবং বেশিরভাগ যা এটিকে উত্পাদনে দেয় না এবং সেই অ্যাপগুলি যা কখনও জনপ্রিয় বা ব্যাপকভাবে ব্যবহৃত হয় না।
আর্টঅফ ওয়ারফেয়ার

11

আমি এই সিদ্ধান্তের যৌক্তিকতা জানি না, তবে আমি জানি যে আপনি সেটটাইমআউট ব্যবহার করে মাল্টি-থ্রেডেড প্রোগ্রামিংয়ের কিছু সুবিধা অনুকরণ করতে পারেন। আপনি একই সাথে একাধিক প্রক্রিয়াগুলি করার কাজ করার বিভ্রমটি দিতে পারেন, যদিও বাস্তবে, সমস্ত কিছুই এক থ্রেডে ঘটে।

আপনার ফাংশনটিতে কিছুটা কাজ করতে হবে এবং তারপরে এমন কিছু কল করুন:

setTimeout(function () {
    ... do the rest of the work...
}, 0);

এবং অন্য যে কোনও কাজ করা দরকার (যেমন ইউআই আপডেট, অ্যানিমেটেড চিত্রগুলি ইত্যাদি) তারা যখন সুযোগ পাবে তখন ঘটবে।


বেশিরভাগ ক্ষেত্রে আমি একটি loopঅভ্যন্তর ব্যবহার করতে চাই setTimeoutতবে দৃশ্যত এটি কাজ করে না। আপনি কি এরকম কিছু করেছেন বা আপনার একটি হ্যাক আছে? উদাহরণস্বরূপ 1000 এলিমেন্টের অ্যারের জন্য হবে, আমি দুটি setTimeoutকলের ভিতরে লুপের জন্য দুটি ব্যবহার করার প্রত্যাশা করি যেটি প্রথম লুপগুলি মাধ্যমে এবং প্রিন্ট উপাদানটি 0..499, দ্বিতীয় লুপের মাধ্যমে এবং মুদ্রণ উপাদানটি দিয়ে যায় 500..999
বেনজামিনজ

সাধারণত কৌশলটি হ'ল রাষ্ট্রকে বাঁচানো এবং চালিয়ে যাওয়া। উদাহরণস্বরূপ, বলুন আপনি 0 থেকে 1000 মুদ্রণ করতে চান, আপনি 0 থেকে 499 মুদ্রণ করতে পারেন এবং তারপরে সেটটাইমআউট ট্রিকটি আর্গুমেন্ট 500 দিয়ে করতে পারেন inside ভিতরে কোডটি আর্গুমেন্টটি নিতে (500) জানবে এবং সেখান থেকে লুপটি শুরু করবে।
ইয়াল

8

আপনি কি বোঝাতে চেয়েছেন যে ভাষাটি মাল্টিথ্রেডিং সমর্থন করে না বা ব্রাউজারগুলিতে জাভাস্ক্রিপ্ট ইঞ্জিনগুলি মাল্টিথ্রেডিং সমর্থন করে না কেন?

প্রথম প্রশ্নের উত্তর হ'ল ব্রাউজারে জাভাস্ক্রিপ্ট বোঝানো হচ্ছে একটি স্যান্ডবক্সে এবং একটি মেশিন / ওএস-স্বতন্ত্র উপায়ে চালানো, মাল্টিথ্রেডিং সমর্থন যুক্ত করা ভাষাটিকে জটিল করে তুলবে এবং ভাষাটিকে ওএসের সাথে খুব কাছাকাছি বেঁধে ফেলবে।


6

নোড.জেএসএস 10.5+ পরীক্ষামূলক বৈশিষ্ট্য হিসাবে কর্মী থ্রেডগুলিকে সমর্থন করে (আপনি এটি - এক্সপেরিমেন্টাল-কর্মী পতাকা সহ সক্ষম করতে পারেন ): https://nodejs.org/api/worker_threads.html

সুতরাং, নিয়মটি হ'ল:

  • আপনার যদি আই / ও বাউন্ড অপস করতে হয় তবে অভ্যন্তরীণ প্রক্রিয়াটি ব্যবহার করুন (ওরফে কলব্যাক / প্রতিশ্রুতি / অ্যাসিঙ্ক-প্রতীক্ষা)
  • আপনার যদি সিপিইউ বাউন্ড অপস করতে হয় তবে কর্মী থ্রেড ব্যবহার করুন।

কর্মী থ্রেডগুলি দীর্ঘস্থায়ী থ্রেডগুলির উদ্দেশ্যে করা হয়, যার অর্থ আপনি ব্যাকগ্রাউন্ড থ্রেড রেখেছিলেন এবং তারপরে আপনি বার্তা প্রেরণের মাধ্যমে এর সাথে যোগাযোগ করেন।

অন্যথায়, যদি আপনাকে কোনও বেনাম ফাংশন সহ ভারী সিপিইউ লোড চালানোর প্রয়োজন হয়, তবে আপনি https://github.com/wilk/microjob , কর্মী থ্রেডের চারপাশে নির্মিত একটি ছোট লাইব্রেরির সাথে যেতে পারেন ।


4

ম্যাট বি যেমন বলেছেন, প্রশ্নটি খুব পরিষ্কার নয়। ধরে নিই যে আপনি ভাষাটিতে মাল্টিথ্রেডিং সমর্থন সম্পর্কে জিজ্ঞাসা করছেন: কারণ বর্তমানে ব্রাউজারে চলমান অ্যাপ্লিকেশনগুলির 99.999% এর প্রয়োজন নেই। আপনার যদি সত্যিই এটির প্রয়োজন হয় তবে কার্যকারিতা রয়েছে (উইন্ডো.সেটটাইমআউট ব্যবহার করার মতো)।

সাধারণভাবে মাল্টিথ্রেডিং খুব, খুব, খুব, খুব, খুব, খুব শক্ত (আমি কি বলেছিলাম যে এটি শক্ত?) যদি না আপনি অতিরিক্ত বিধিনিষেধ না রাখেন (তবে কেবলমাত্র অপরিবর্তনীয় ডেটা ব্যবহার করার মতো) right


3

ইন্টেল জাভাস্ক্রিপ্টে মাল্টিথ্রেডিংয়ের বিষয়ে কিছু মুক্ত-উত্স গবেষণা করছে, এটি সম্প্রতি জিডিসিতে 2012 সালে প্রদর্শিত হয়েছিল Here ভিডিওটির লিঙ্কটি এখানে । গবেষণা গোষ্ঠীটি ওপেনসিএল ব্যবহার করেছে যা প্রাথমিকভাবে ইন্টেল চিপ সেট এবং উইন্ডোজ ওএসকে কেন্দ্র করে। প্রকল্পটি কোড-নামের রিভারট্রাইল এবং কোডটি গিটহাবটিতে উপলব্ধ

আরও কিছু দরকারী লিঙ্ক:

ওয়েব অ্যাপ্লিকেশনগুলির জন্য একটি কম্পিউটিং হাইওয়ে তৈরি করা


2

বর্তমানে কিছু ব্রাউজার মাল্টিথ্রেডিং সমর্থন করে। সুতরাং, আপনার যদি প্রয়োজন হয় আপনি নির্দিষ্ট গ্রন্থাগার ব্যবহার করতে পারেন। উদাহরণস্বরূপ, পরবর্তী উপকরণগুলি দেখুন:


1

এটি এমন বাস্তবায়ন যা বহু-থ্রেডিং সমর্থন করে না। বর্তমানে গুগল গিয়ার্স বাহ্যিক প্রক্রিয়াগুলি সম্পাদন করে কিছু রূপসতর্কতা ব্যবহারের একটি উপায় সরবরাহ করছে তবে এটি প্রায়।

নতুন ব্রাউজার গুগল আজ প্রকাশ করার কথা রয়েছে (গুগল ক্রোম) এটিকে প্রক্রিয়াতে আলাদা করে সমান্তরালভাবে কিছু কোড কার্যকর করে।

মূল ভাষাটি অবশ্যই জাভা বলার মতোই সমর্থন করতে পারে তবে এরলংয়ের সমঝোতার মতো কোনও কিছুর জন্য সমর্থন দিগন্তের কাছাকাছি কোথাও নেই।


1

জাভাস্ক্রিপ্ট একক থ্রেডযুক্ত ভাষা। এর অর্থ এটির একটি কল স্ট্যাক এবং একটি মেমোরি হিপ রয়েছে। যেমনটি প্রত্যাশিত, এটি কোডটি কার্যকরভাবে কার্যকর করে এবং পরবর্তীটিতে যাওয়ার আগে একটি টুকরা কোডটি কার্যকর করতে হবে। এটি সিনক্রোনাস, তবে এমন সময়ে ক্ষতিকারক হতে পারে। উদাহরণস্বরূপ, যদি কোনও ক্রিয়াকলাপ সম্পাদন করতে কিছুটা সময় নেয় বা কোনও কিছুর জন্য অপেক্ষা করতে হয় তবে এর মধ্যে এটি সবকিছু হিমশীতল করে দেয়।


0

আমি যতদূর শুনেছি গুগল ক্রোমে মাল্টিথ্রেডেড জাভাস্ক্রিপ্ট থাকবে তাই এটি একটি "বর্তমান বাস্তবায়ন" সমস্যা।


0

থ্রেড সিঙ্ক্রোনাইজেশনের জন্য যথাযথ ভাষা সমর্থন ব্যতীত, নতুন বাস্তবায়নের চেষ্টা করার জন্য এটি কোনও অর্থবোধ করে না। বিদ্যমান জেএস অ্যাপ্লিকেশন (উদাহরণস্বরূপ ExtJS ব্যবহার করে যে কোনও কিছুই) সম্ভবত অপ্রত্যাশিতভাবে ক্রাশ হবে, তবে কোনও synchronizedকীওয়ার্ড বা অনুরূপ কিছু না থাকলে সঠিকভাবে আচরণ করে এমন নতুন প্রোগ্রাম লিখতে খুব শক্ত বা এমনকি অসম্ভবও হতে পারে।


-1

তবে আপনি কিছু এক্সটেনশনে সম্মতি আনতে ইওল ফাংশনটি ব্যবহার করতে পারেন

/* content of the threads to be run */
var threads = [
        [
            "document.write('Foo <br/>');",
            "document.write('Foo <br/>');",
            "document.write('Foo <br/>');",
            "document.write('Foo <br/>');",
            "document.write('Foo <br/>');",
            "document.write('Foo <br/>');",
            "document.write('Foo <br/>');",
            "document.write('Foo <br/>');",
            "document.write('Foo <br/>');",
            "document.write('Foo <br/>');"
        ],
        [
            "document.write('Bar <br/>');",
            "document.write('Bar <br/>');",
            "document.write('Bar <br/>');",
            "document.write('Bar <br/>');",
            "document.write('Bar <br/>');",
            "document.write('Bar <br/>');",
            "document.write('Bar <br/>');",
            "document.write('Bar <br/>');",
            "document.write('Bar <br/>');"
        ]
    ];

window.onload = function() {
    var lines = 0, quantum = 3, max = 0;

    /* get the longer thread length */
    for(var i=0; i<threads.length; i++) {
        if(max < threads[i].length) {
            max = threads[i].length;
        }
    }

    /* execute them */
    while(lines < max) {
        for(var i=0; i<threads.length; i++) {
            for(var j = lines; j < threads[i].length && j < (lines + quantum); j++) {
                eval(threads[i][j]);
            }
        }
        lines += quantum;
    }
}

-2

ওয়েব ওয়ার্কার্স এইচটিএমএল 5 নিয়ে আসা ব্যবহার করে জাভাস্ক্রিপ্টের সাথে একাধিক থ্রেডিং স্পষ্টভাবে সম্ভব।

ওয়েব ওয়ার্কার্স এবং একটি স্ট্যান্ডার্ড মাল্টি-থ্রেডিং পরিবেশের মধ্যে প্রধান পার্থক্য হ'ল মেমরি রিসোর্সগুলি মূল থ্রেডের সাথে ভাগ করা হয় না, কোনও বস্তুর উল্লেখ একটি থ্রেড থেকে অন্য থ্রেডে দৃশ্যমান হয় না। থ্রেডগুলি বার্তাগুলির আদান প্রদানের মাধ্যমে যোগাযোগ করে, সুতরাং ইভেন্ট-চালিত ডিজাইনের ধরণ অনুসরণ করে একটি সিঙ্ক্রোনাইজেশন এবং সমবর্তী পদ্ধতি কল অ্যালগরিদম বাস্তবায়ন সম্ভব।

অনেকগুলি ফ্রেমওয়ার্কগুলি থ্রেডগুলির মধ্যে প্রোগ্রামিং গঠনের অনুমতি দেয়, যার মধ্যে OODK-JS, একটি ওওপি জেএস ফ্রেমওয়ার্ক সহবর্তী প্রোগ্রামিং সমর্থন করে https://github.com/GOMServices/oodk-js-oop-for-js


5
মেমরি ভাগ করে নেওয়া একটি পৃথক প্রক্রিয়া (যেমন কাঁটাচামচ () বনাম এক্সিকিউটি ()) এর বিপরীতে থ্রেডের সঠিক সংজ্ঞা। থ্রেডগুলি বস্তুগুলি ভাগ করতে পারে, প্রক্রিয়াগুলি অবশ্যই আইপিসি ব্যবহার করে। ওয়েব কর্মীরা মাল্টিথ্রেডিং করছে না।
felixfbecker
আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.