আমি এটি সম্পর্কে চিন্তাভাবনা করছি এবং এটিই আমি নিয়ে এসেছি:
ধরা যাক আমাদের মতো একটি কোড রয়েছে:
console.clear();
console.log("a");
setTimeout(function(){console.log("b");},1000);
console.log("c");
setTimeout(function(){console.log("d");},0);
একটি অনুরোধ আসে, এবং জেএস ইঞ্জিন ধাপে ধাপে উপরের কোডটি কার্যকর করতে শুরু করে। প্রথম দুটি কল হ'ল সিঙ্ক কল। কিন্তু যখন এটি setTimeout
পদ্ধতিতে আসে , এটি একটি অ্যাসিঙ্ক এক্সিকিউশন হয়ে যায়। তবে জেএস তাৎক্ষণিকভাবে এ থেকে ফিরে আসে এবং সম্পাদন চালিয়ে যায়, যাকে বলা হয় Non-Blocking
বা Async
। এবং এটি অন্যান্য ইত্যাদির উপর কাজ করে চলেছে
এই মৃত্যুদণ্ডের ফলাফল নিম্নলিখিত:
acdb
সুতরাং মূলত দ্বিতীয়টি setTimeout
প্রথম সমাপ্ত হয়েছিল এবং এর কলব্যাক ফাংশন প্রথমটির চেয়ে আগে কার্যকর হয়ে যায় এবং তা বোঝা যায়।
আমরা এখানে একক থ্রেডযুক্ত অ্যাপ্লিকেশন সম্পর্কে কথা বলছি। জেএস ইঞ্জিন এটি কার্যকর করে রাখে এবং যতক্ষণ না এটি প্রথম অনুরোধটি শেষ করে, এটি দ্বিতীয়টিতে যাবে না। তবে ভাল কথাটি হ'ল এটি setTimeout
সমাধান করার মতো ব্লকিং অপারেশনের জন্য অপেক্ষা করবে না তাই এটি আরও দ্রুত হবে কারণ এটি নতুন আগত অনুরোধগুলি গ্রহণ করে।
তবে আমার প্রশ্নগুলি নিম্নলিখিত আইটেমগুলির চারপাশে উত্থিত হয়:
# 1: আমরা যদি একক থ্রেডযুক্ত অ্যাপ্লিকেশনটির বিষয়ে কথা বলি, তবে setTimeouts
জেএস ইঞ্জিন আরও অনুরোধ গ্রহণ করে এবং সেগুলি কার্যকর করার সময় কোন প্রক্রিয়াটি প্রক্রিয়া করে? কীভাবে একক থ্রেড অন্যান্য অনুরোধে কাজ চালিয়ে যেতে পারে? setTimeout
অন্যান্য অনুরোধগুলি আসতে এবং কার্যকর করা অবস্থায় কী কাজ করে ?
# 2: যদি setTimeout
আরও অনুরোধগুলি আসে এবং কার্যকর করা হয় তখন এই ফাংশনগুলি যদি পর্দার আড়ালে কার্যকর করা হয়, তবে পর্দার পিছনে অ্যাসিঙ্ক মৃত্যুদণ্ড কার্যকর করা কী? আমরা যাকে বলে সেই জিনিসটি কী EventLoop
?
# 3: তবে পুরো পদ্ধতিটি EventLoop
এমনভাবে রাখা উচিত নয় যাতে পুরো জিনিসটি কার্যকর হয় এবং কলব্যাক পদ্ধতিটি কল হয়? কলব্যাক ফাংশন সম্পর্কে কথা বলার সময় এটিই আমি বুঝতে পারি:
function downloadFile(filePath, callback)
{
blah.downloadFile(filePath);
callback();
}
তবে এই ক্ষেত্রে, জেএস ইঞ্জিন কীভাবে জানতে পারে যে এটি একটি অ্যাসিঙ্ক ফাংশন কিনা তা যাতে এটি EventLoop? Perhaps something like the
সি # তে অ্যাসিঙ্ক কীওয়ার্ডে কলব্যাক রাখতে পারে বা কোনও বৈশিষ্ট্যের কোনও ধরণের যা জেএস ইঞ্জিনটি পদ্ধতি গ্রহণ করবে তা হ'ল একটি অ্যাসিঙ্ক পদ্ধতি is এবং সেই অনুযায়ী চিকিত্সা করা উচিত।
# 4: তবে একটি নিবন্ধটি কীভাবে জিনিসগুলি কাজ করছে তা নিয়ে আমি অনুমান করেছিলাম তার সম্পূর্ণ বিপরীতে বলেছেন:
ইভেন্ট লুপটি কলব্যাক ফাংশনের একটি সারি। যখন একটি অ্যাসিঙ্ক ফাংশন সঞ্চালিত হয়, কলব্যাক ফাংশনটি কাতারে ধাক্কা দেয়। জাভাস্ক্রিপ্ট ইঞ্জিন একটি অ্যাসিঙ্ক ফাংশন কার্যকর হওয়ার পরে কোডটি না হওয়া পর্যন্ত ইভেন্টের লুপটির প্রক্রিয়া শুরু করে না।
# 5: এবং এই চিত্রটি এখানে রয়েছে যা সহায়ক হতে পারে তবে চিত্রটির প্রথম ব্যাখ্যাটি 4 নম্বরের প্রশ্নে উল্লিখিত একই জিনিসটি বলছে:
সুতরাং আমার প্রশ্নটি এখানে উপরে তালিকাভুক্ত আইটেমগুলি সম্পর্কে কিছু স্পষ্টতা পেতে?