জাভাস্ক্রিপ্ট এবং থ্রেডস


137

জাভাস্ক্রিপ্টে মাল্টি-থ্রেডিং করার কোনও উপায় আছে?


2
জাভাস্ক্রিপ্টটিতে অন্তত বর্তমান আকারে থ্রেড থাকে না। আপনি ঠিক কি করতে চেষ্টা করছেন?
এরিক পোহল

3
আপনি কি এইটির গৃহীত উত্তরটি পরিবর্তন করতে পারবেন? stackoverflow.com/a/30891727/2576706 এটি ভবিষ্যতের ব্যবহারকারীর জন্য অনেক বেশি উন্নত ..
লুডোভিক ফেল্টজ

উত্তর:


109

Http://caniuse.com/#search=worker দেখুনসর্বাধিক আপ টু ডেট সহায়তা তথ্যের জন্য ।

নীচে সমর্থন রাষ্ট্রের অবস্থা ছিল ২০০৯।


আপনি যে শব্দগুলির জন্য গুগল করতে চান তা হ'ল জাভাস্ক্রিপ্ট ওয়ার্কার থ্রেডস

গিয়ার্স ছাড়াও এখন কিছুই না পাওয়া ঠিক, কিন্তু কিভাবে এই বাস্তবায়ন কথা প্রচুর তাই আমি উত্তর ভবিষ্যতে হবে কোন সন্দেহ নেই পরিবর্তন এই প্রশ্নের ঘড়ি অনুমান।

গিয়ার্সের জন্য এখানে প্রাসঙ্গিক ডকুমেন্টেশন রয়েছে: ওয়ার্কারপুল এপিআই

WHATWG এর কর্মীদের থ্রেডগুলির জন্য একটি খসড়া সুপারিশ রয়েছে: ওয়েব ওয়ার্কার্স

এবং মজিলার DOM কর্মী থ্রেডসও রয়েছে


আপডেট: জুন ২০০৯, জাভাস্ক্রিপ্ট থ্রেডগুলির জন্য ব্রাউজারের সমর্থনের বর্তমান অবস্থা

ফায়ারফক্স ৩.৫- এ ওয়েব কর্মী রয়েছে। ওয়েব কর্মীদের কিছু ডেমো, যদি আপনি তাদের কার্যক্রমে দেখতে চান:

গিয়ার্স প্লাগইন ফায়ারফক্সে ইনস্টল করা যেতে পারে।

সাফারি 4 , এবং ওয়েবকিট নাইটলাইজে কর্মী থ্রেড রয়েছে:

ক্রোমের গিয়ারস বেকড রয়েছে, সুতরাং এটি থ্রেডগুলি করতে পারে, যদিও এটির ব্যবহারকারীর কাছ থেকে একটি কনফার্মেশন প্রম্পট প্রয়োজন (এবং এটি ওয়েব কর্মীদের কাছে আলাদা আলাদা এপিআই ব্যবহার করে, যদিও এটি গিয়ার্স প্লাগইন ইনস্টল থাকা কোনও ব্রাউজারে কাজ করবে):

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

আইই 8 এবং আই 99 কেবলমাত্র গিয়ার্স প্লাগইন ইনস্টল করে থ্রেড করতে পারে


1
যদিও সাফারি 4 ওয়েব কর্মীদের সমর্থন করে এটি উপস্থিত ফায়ারফক্স পোস্টম্যাসেজের মাধ্যমে জটিল বস্তুগুলি পাস করার পক্ষে সমর্থন করে: হ্যাকস.মোজিলা.আর / ২০০৯ / 07 / ওয়ার্কিং -স্মার্ট- নোট-হার্ডার বেসপিন প্রকল্পে বাস্তব বিশ্বের ব্যবহারের বিষয়ে সেই পোস্টের শেষ অনুচ্ছেদটি দেখুন গুগলের লিঙ্কগুলির জন্য যা গুগল গিয়ার্সের ক্ষেত্রে ওয়ার্কার এপিআই প্রয়োগ করে এবং যা সাফারি 4 এর কর্মী বাস্তবায়নে নিখোঁজ বৈশিষ্ট্যগুলি এবং পোস্টমেসেজ ইন্টারফেসের উপরে তারা কীভাবে স্বচ্ছ কাস্টম ইভেন্টগুলি প্রয়োগ করেছিল তার বিশদ যুক্ত করে।
স্যাম হাসলার

6
এখন আইআই 9 বেরিয়েছে, আপনি "আইই 8 কেবল গিয়ার্স প্লাগইন ইনস্টলড থ্রেডগুলি করতে পারেন" "এ" আপডেট করতে পারবেন এবং
আইই 9

2
@ inf3rno অন্য থ্রেডে দীর্ঘ গণনা করার জন্য যাতে তারা ব্রাউজারের ইউআই গতি কমিয়ে না দেয়।
স্যাম হাসলার

6
@ সামহ্যাসলার আপনি নিজের উত্তরটি সংশোধন করতে চাইতে পারেন। ওয়েব কর্মীরা এখন সমস্ত আধুনিক ডেস্কটপ ব্রাউজার দ্বারা সমর্থিত। আরও দেখুন caniuse.com/#search=worker
রব ডব্লিউ

2
@ সামহ্যাসলার এটিও লক্ষণীয় যে গুগল গিয়ার্স আর সমর্থিত নয়।
skeggse

73

জাভাস্ক্রিপ্টে মাল্টি-থ্রেডিং এবং অ্যাসিঙ্ক্রোনাস করার বিভিন্ন উপায়

এইচটিএমএল 5 এর আগে জাভাস্ক্রিপ্ট কেবল প্রতি পৃষ্ঠায় একটি থ্রেড কার্যকর করার অনুমতি দেয়।

কিছু হল hacky পথ সঙ্গে একটি অ্যাসিঙ্ক্রোনাস সঞ্চালনের অনুকরণ ছিল ইল্ড , setTimeout(), setInterval(), XMLHttpRequestবা ইভেন্ট হ্যান্ডলার (সঙ্গে একটি উদাহরণ জন্য এই পোস্টের শেষে দেখুন ফলন এবং setTimeout())।

তবে এইচটিএমএল 5 এর সাথে আমরা এখন কর্মের থ্রেডগুলি ফাংশনগুলির সম্পাদনের সমান্তরালে ব্যবহার করতে পারি। এখানে ব্যবহারের একটি উদাহরণ রয়েছে।


রিয়েল মাল্টি থ্রেডিং

মাল্টি-থ্রেডিং: জাভাস্ক্রিপ্ট কর্মী থ্রেডস

এইচটিএমএল 5 ওয়েব ওয়ার্কারের থ্রেডগুলি প্রবর্তন করেছে (দেখুন: ব্রাউজারগুলির সামঞ্জস্যতা )
দ্রষ্টব্য: আই 9 এবং পূর্ববর্তী সংস্করণগুলি এটি সমর্থন করে না।

এই কর্মী থ্রেডগুলি জাভাস্ক্রিপ্ট থ্রেড যা পৃষ্ঠার কার্যকারিতা প্রভাবিত না করে পটভূমিতে চলে। ওয়েব কর্মী সম্পর্কে আরও তথ্যের জন্য ডকুমেন্টেশন বা এই টিউটোরিয়ালটি পড়ুন

এখানে 3 ওয়েব কর্মী থ্রেড সহ একটি সাধারণ উদাহরণ যা MAX_VALUE গণনা করে এবং আমাদের পৃষ্ঠায় বর্তমান গণিত মান দেখায়:

//As a worker normally take another JavaScript file to execute we convert the function in an URL: http://stackoverflow.com/a/16799132/2576706
function getScriptPath(foo){ return window.URL.createObjectURL(new Blob([foo.toString().match(/^\s*function\s*\(\s*\)\s*\{(([\s\S](?!\}$))*[\s\S])/)[1]],{type:'text/javascript'})); }

var MAX_VALUE = 10000;

/*
 *	Here are the workers
 */
//Worker 1
var worker1 = new Worker(getScriptPath(function(){
    self.addEventListener('message', function(e) {
        var value = 0;
        while(value <= e.data){
            self.postMessage(value);
            value++;
        }
    }, false);
}));
//We add a listener to the worker to get the response and show it in the page
worker1.addEventListener('message', function(e) {
  document.getElementById("result1").innerHTML = e.data;
}, false);


//Worker 2
var worker2 = new Worker(getScriptPath(function(){
    self.addEventListener('message', function(e) {
        var value = 0;
        while(value <= e.data){
            self.postMessage(value);
            value++;
        }
    }, false);
}));
worker2.addEventListener('message', function(e) {
  document.getElementById("result2").innerHTML = e.data;
}, false);


//Worker 3
var worker3 = new Worker(getScriptPath(function(){
    self.addEventListener('message', function(e) {
        var value = 0;
        while(value <= e.data){
            self.postMessage(value);
            value++;
        }
    }, false);
}));
worker3.addEventListener('message', function(e) {
    document.getElementById("result3").innerHTML = e.data;
}, false);


// Start and send data to our worker.
worker1.postMessage(MAX_VALUE); 
worker2.postMessage(MAX_VALUE); 
worker3.postMessage(MAX_VALUE);
<div id="result1"></div>
<div id="result2"></div>
<div id="result3"></div>

আমরা দেখতে পাচ্ছি যে তিনটি থ্রেড একযোগে কার্যকর করা হয়েছে এবং পৃষ্ঠাতে তাদের বর্তমান মান মুদ্রণ করে। তারা পৃষ্ঠাটি হিমায়িত করে না কারণ তারা পৃথক থ্রেড সহ পটভূমিতে কার্যকর করা হয়।


একাধিক থ্রেডিং: একাধিক iframes সহ

এটি অর্জনের আরেকটি উপায় হ'ল একাধিক আইফ্রেম ব্যবহার করা , প্রত্যেকে একটি থ্রেড কার্যকর করবে। আমরা ইউআরএল দ্বারা আইফ্রেমে কিছু প্যারামিটার দিতে পারি এবং ফলাফলটি পেতে এবং এটিকে আবার মুদ্রণ করতে ইফ্রেমে তার পিতামাতার সাথে যোগাযোগ করতে পারে ( আইফ্রেমটি অবশ্যই একই ডোমেনে থাকতে হবে)।

এই উদাহরণটি সমস্ত ব্রাউজারে কাজ করে না! iframes সাধারণত মূল পৃষ্ঠা হিসাবে একই থ্রেড / প্রক্রিয়াতে চালিত হয় (তবে ফায়ারফক্স এবং ক্রোমিয়াম এটিকে অন্যরকমভাবে পরিচালনা করে বলে মনে হচ্ছে)।

যেহেতু কোড স্নিপেট একাধিক এইচটিএমএল ফাইলগুলিকে সমর্থন করে না, আমি কেবল এখানে বিভিন্ন কোড সরবরাহ করব:

index.html:

//The 3 iframes containing the code (take the thread id in param)
<iframe id="threadFrame1" src="thread.html?id=1"></iframe>
<iframe id="threadFrame2" src="thread.html?id=2"></iframe>
<iframe id="threadFrame3" src="thread.html?id=3"></iframe>

//Divs that shows the result
<div id="result1"></div>
<div id="result2"></div>
<div id="result3"></div>


<script>
    //This function is called by each iframe
    function threadResult(threadId, result) {
        document.getElementById("result" + threadId).innerHTML = result;
    }
</script>

thread.html:

//Get the parameters in the URL: http://stackoverflow.com/a/1099670/2576706
function getQueryParams(paramName) {
    var qs = document.location.search.split('+').join(' ');
    var params = {}, tokens, re = /[?&]?([^=]+)=([^&]*)/g;
    while (tokens = re.exec(qs)) {
        params[decodeURIComponent(tokens[1])] = decodeURIComponent(tokens[2]);
    }
    return params[paramName];
}

//The thread code (get the id from the URL, we can pass other parameters as needed)
var MAX_VALUE = 100000;
(function thread() {
    var threadId = getQueryParams('id');
    for(var i=0; i<MAX_VALUE; i++){
        parent.threadResult(threadId, i);
    }
})();

বহু-থ্রেডিং অনুকরণ করুন

একক থ্রেড: সেটটাইমআউট () এর সাথে জাভাস্ক্রিপ্ট সম্মিলন অনুকরণ করুন

'নিষ্পাপ' উপায়টি হ'ল setTimeout()একের পর এক ফাংশনটি সম্পাদন করা :

setTimeout(function(){ /* Some tasks */ }, 0);
setTimeout(function(){ /* Some tasks */ }, 0);
[...]

তবে এই পদ্ধতিটি কার্যকর হয় না কারণ প্রতিটি কাজ একের পর এক সম্পাদিত হবে।

ফাংশনটিকে পুনরাবৃত্তভাবে কল করে আমরা অ্যাসিনক্রোনাস এক্সিকিউশনটি অনুকরণ করতে পারি:

var MAX_VALUE = 10000;

function thread1(value, maxValue){
    var me = this;
    document.getElementById("result1").innerHTML = value;
    value++;
  
    //Continue execution
    if(value<=maxValue)
        setTimeout(function () { me.thread1(value, maxValue); }, 0);
}

function thread2(value, maxValue){
    var me = this;
    document.getElementById("result2").innerHTML = value;
    value++;
	
    if(value<=maxValue)
        setTimeout(function () { me.thread2(value, maxValue); }, 0);
}

function thread3(value, maxValue){
    var me = this;
    document.getElementById("result3").innerHTML = value;
    value++;
	
    if(value<=maxValue)
        setTimeout(function () { me.thread3(value, maxValue); }, 0);
}

thread1(0, MAX_VALUE);
thread2(0, MAX_VALUE);
thread3(0, MAX_VALUE);
<div id="result1"></div>
<div id="result2"></div>
<div id="result3"></div>

আপনি দেখতে পাচ্ছেন যে এই দ্বিতীয় পদ্ধতিটি খুব ধীর এবং ব্রাউজারকে হিমশীতল কারণ এটি ফাংশনগুলি সম্পাদন করতে মূল থ্রেডটি ব্যবহার করে।


একক থ্রেড: ফলন সহ জাভাস্ক্রিপ্ট সহকারী নকল করুন

ইল্ড একটি নতুন বৈশিষ্ট্য ECMAScript প্রোগ্রামিং 6 , এটি শুধুমাত্র ফায়ারফক্স এবং Chrome প্রাচীনতম সংস্করণ উপর কাজ করে (যেমন, Chrome আপনি সক্রিয় করতে হবে পরীক্ষামূলক JavaScript প্রদর্শনে ক্রোম: // পতাকা / # সক্ষম-জাভাস্ক্রিপ্ট-সাদৃশ্য )।

ফলন কীওয়ার্ড জেনারেটর ফাংশন এক্সিকিউশনকে বিরতি দেয় এবং ফলন কীওয়ার্ডের পরে প্রকাশের অভিব্যক্তির মান জেনারেটরের কলারে ফিরে আসে। এটি রিটার্ন কীওয়ার্ডের জেনারেটর ভিত্তিক সংস্করণ হিসাবে ভাবা যেতে পারে।

একটি জেনারেটর আপনাকে কোনও ফাংশন সম্পাদন স্থগিত করতে এবং পরে এটি পুনরায় শুরু করার অনুমতি দেয় ume একটি জেনারেটর ট্রাম্পোলাইনিং নামক একটি প্রযুক্তি দিয়ে আপনার ফাংশনগুলি নির্ধারণের জন্য ব্যবহার করা যেতে পারে ।

এখানে উদাহরণ:

var MAX_VALUE = 10000;

Scheduler = {
	_tasks: [],
	add: function(func){
		this._tasks.push(func);
	},	
	start: function(){
		var tasks = this._tasks;
		var length = tasks.length;
		while(length>0){
			for(var i=0; i<length; i++){
				var res = tasks[i].next();
				if(res.done){
					tasks.splice(i, 1);
					length--;
					i--;
				}
			}
		}
	}	
}


function* updateUI(threadID, maxValue) {
  var value = 0;
  while(value<=maxValue){
	yield document.getElementById("result" + threadID).innerHTML = value;
	value++;
  }
}

Scheduler.add(updateUI(1, MAX_VALUE));
Scheduler.add(updateUI(2, MAX_VALUE));
Scheduler.add(updateUI(3, MAX_VALUE));

Scheduler.start()
<div id="result1"></div>
<div id="result2"></div>
<div id="result3"></div>


3
এটি সত্যই সেরা উত্তর হওয়া উচিত।
জেরি লিউ

14

এইচটিএমএল 5 "সাইড- স্প্যাকস " এর সাথে সেটটাইমআউট (), সেটইন্টারভাল (), ইত্যাদির সাহায্যে জাভাস্ক্রিপ্ট হ্যাক করার দরকার নেই

এইচটিএমএল 5 এবং বন্ধুরা জাভাস্ক্রিপ্ট ওয়েব কর্মীদের নির্দিষ্টকরণের পরিচয় দেয় । এটি অ্যাসিঙ্ক্রোনালি এবং স্বতন্ত্রভাবে স্ক্রিপ্টগুলি চালনার জন্য একটি এপিআই।

লিংক স্পেসিফিকেশন এবং একটি টিউটোরিয়াল


11

জাভাস্ক্রিপ্টে সত্যিকারের থ্রেডিং নেই। জাভাস্ক্রিপ্ট হ'ল ম্যালেবল ভাষা হ'ল এটি আপনাকে কিছু অনুকরণ করার অনুমতি দেয়। আমি অন্য দিন জুড়ে এসেছি এমন একটি উদাহরণ এখানে ।


1
"সত্য থ্রেডিং" বলতে কী বোঝ? সবুজ থ্রেডগুলি সত্য থ্রেড।
ওয়েস

10

জাভাস্ক্রিপ্টে কোনও সত্যিকারের বহু-থ্রেডিং নেই তবে আপনি ব্যবহার করে অ্যাসিক্রোনাস আচরণ পেতে পারেন setTimeout() অ্যাসিঙ্ক্রোনাস এজেএক্স অনুরোধগুলি এবং অ্যাসিনক্রোনাস ।

ঠিক কি আপনি সাধন করার চেষ্টা করছেন?


7

জাভাস্ক্রিপ্টে মাল্টি-থ্রেডিং অনুকরণ করার কেবল এখানে একটি উপায়

এখন আমি 3 টি থ্রেড তৈরি করতে যা যা সংখ্যার সংযোজন গণনা করবে, সংখ্যাগুলিকে 13 দিয়ে ভাগ করা যাবে এবং সংখ্যাগুলি 3 দিয়ে 10000000000 পর্যন্ত ভাগ করা যেতে পারে And এবং এই 3 টি ফাংশন কনকুরেন্সির অর্থ হিসাবে একই সময়ে চালাতে সক্ষম হয় না। তবে আমি আপনাকে এমন একটি কৌশল দেখাব যা একই সময়ে এই ফাংশনগুলি পুনরাবৃত্তভাবে চালিত করবে: জেএসফিডাল

এই কোডটি আমার।

শরীরের অংশ

    <div class="div1">
    <input type="button" value="start/stop" onclick="_thread1.control ? _thread1.stop() : _thread1.start();" /><span>Counting summation of numbers till 10000000000</span> = <span id="1">0</span>
</div>
<div class="div2">
    <input type="button" value="start/stop" onclick="_thread2.control ? _thread2.stop() : _thread2.start();" /><span>Counting numbers can be divided with 13 till 10000000000</span> = <span id="2">0</span>
</div>
<div class="div3">
    <input type="button" value="start/stop" onclick="_thread3.control ? _thread3.stop() : _thread3.start();" /><span>Counting numbers can be divided with 3 till 10000000000</span> = <span id="3">0</span>
</div>

জাভাস্ক্রিপ্ট অংশ

var _thread1 = {//This is my thread as object
    control: false,//this is my control that will be used for start stop
    value: 0, //stores my result
    current: 0, //stores current number
    func: function () {   //this is my func that will run
        if (this.control) {      // checking for control to run
            if (this.current < 10000000000) {
                this.value += this.current;   
                document.getElementById("1").innerHTML = this.value;
                this.current++;
            }
        }
        setTimeout(function () {  // And here is the trick! setTimeout is a king that will help us simulate threading in javascript
            _thread1.func();    //You cannot use this.func() just try to call with your object name
        }, 0);
    },
    start: function () {
        this.control = true;   //start function
    },
    stop: function () {
        this.control = false;    //stop function
    },
    init: function () {
        setTimeout(function () {
            _thread1.func();    // the first call of our thread
        }, 0)
    }
};
var _thread2 = {
    control: false,
    value: 0,
    current: 0,
    func: function () {
        if (this.control) {
            if (this.current % 13 == 0) {
                this.value++;
            }
            this.current++;
            document.getElementById("2").innerHTML = this.value;
        }
        setTimeout(function () {
            _thread2.func();
        }, 0);
    },
    start: function () {
        this.control = true;
    },
    stop: function () {
        this.control = false;
    },
    init: function () {
        setTimeout(function () {
            _thread2.func();
        }, 0)
    }
};
var _thread3 = {
    control: false,
    value: 0,
    current: 0,
    func: function () {
        if (this.control) {
            if (this.current % 3 == 0) {
                this.value++;
            }
            this.current++;
            document.getElementById("3").innerHTML = this.value;
        }
        setTimeout(function () {
            _thread3.func();
        }, 0);
    },
    start: function () {
        this.control = true;
    },
    stop: function () {
        this.control = false;
    },
    init: function () {
        setTimeout(function () {
            _thread3.func();
        }, 0)
    }
};

_thread1.init();
_thread2.init();
_thread3.init();

আমি আশা করি এই উপায়ে সহায়ক হবে।


6

আপনি ন্যারেটিভ জাভাস্ক্রিপ্ট ব্যবহার করতে পারেন , এমন একটি সংকলক যা আপনার কোডকে একটি রাজ্য মেশিনে রূপান্তরিত করবে, কার্যকরভাবে আপনাকে থ্রেডিং অনুকরণ করতে দেয়। এটি এমন একটি "ফলনকারী" অপারেটর যুক্ত করে ('->' হিসাবে চিহ্নিত) যা আপনাকে একক, লিনিয়ার কোড ব্লকে অ্যাসিক্রোনাস কোড লেখার অনুমতি দেয়।



3

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


1
গুগল গিয়ার্স এপিআই আর উপলব্ধ নেই।
লুডোভিচ ফেল্টজ

3

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

উদাহরণস্বরূপ, কোনও পিতা-মাতা iframe- এ, egFunction()একবার iframe সামগ্রী লোড হয়ে গেলে পিতামাত্ত নথিতে কল করতে (এটি অ্যাসিনক্রোনাস অংশ)

parent.egFunction();

গতিশীলভাবে iframes খুব জেনারেট করে তাই আপনি চাইলে মূল এইচটিএমএল কোড এগুলি থেকে মুক্ত হয়।


1
এই বর্ণনাটি আমার পছন্দ মত কিছুটা সংক্ষিপ্ত ছিল। আপনি কীভাবে এই কৌশলটি করবেন তা বিশদভাবে বলতে পারেন, বা কোনও কোড দেখাচ্ছে এমন টিউটোরিয়ালে কিছু লিঙ্ক পোস্ট করতে পারেন?
অলিগোফ্রেন

3

আর একটি সম্ভাব্য পদ্ধতি জাভাস্ক্রিপ্ট পরিবেশে একটি জাভাস্ক্রিপ্ট ইন্টারপ্রেটার ব্যবহার করছে।

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

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

আমি একটি ছোট প্রকল্প প্রণীত এই প্রকট

এই ব্লগ পোস্টে আরও বিস্তারিত ব্যাখ্যা ।


1

জাভাস্ক্রিপ্টে থ্রেড নেই, তবে আমাদের শ্রমিক রয়েছে।

আপনার যদি ভাগ করা বস্তুর প্রয়োজন না হয় তবে শ্রমিকরা ভাল পছন্দ হতে পারে।

বেশিরভাগ ব্রাউজার বাস্তবায়ন আপনাকে সমস্ত কোর ব্যবহার করার অনুমতি দেয় এমন সমস্ত প্রকৃত অর্থে কর্মীদের ছড়িয়ে দেবে। আপনি এখানে একটি ডেমো দেখতে পারেন ।

আমি টাস্ক.জেএস নামে একটি লাইব্রেরি তৈরি করেছি যা এটি করা খুব সহজ করে তোলে।

টাস্ক.জে সব সিপিতে চালিত করার জন্য সিপিইউ নিবিড় কোড পাওয়ার জন্য সরলীকৃত ইন্টারফেস ( নোড.জেএস এবং ওয়েব)

একটি উদাহরণ হবে

function blocking (exampleArgument) {
    // block thread
}

// turn blocking pure function into a worker task
const blockingAsync = task.wrap(blocking);

// run task on a autoscaling worker pool
blockingAsync('exampleArgumentValue').then(result => {
    // do something with result
});

0

এইচটিএমএল 5 স্পেসিফিকেশন সহ আপনার খুব বেশি জেএস লিখতে হবে না বা কিছু হ্যাক সন্ধান করতে হবে না।

এইচটিএমএল 5 এ প্রবর্তিত বৈশিষ্ট্যগুলির মধ্যে একটি হ'ল ওয়েব ওয়ার্কার্স যা পৃষ্ঠার কার্যকারিতা প্রভাবিত না করেই অন্য স্ক্রিপ্টগুলির চেয়ে আলাদাভাবে পটভূমিতে চলছে জাভাস্ক্রিপ্ট।

এটি প্রায় সমস্ত ব্রাউজারে সমর্থিত:

ক্রোম - 4.0+

আইই - 10.0+

মজিলা - ৩.৫+

সাফারি - 4.0+

অপেরা - 11.5+

আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.