কোনটি জাভাস্ক্রিপ্ট ফাংশনগুলি অ-ব্লক করা বনাম ব্লক করছে তা নির্ধারণ করে?


27

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

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

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

সম্ভবত আমি এটি সম্পর্কে সঠিকভাবে ভাবছিও না - এই আশায় যে কেউ আমাকে সোজা করে দিতে পারে। ধন্যবাদ!


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

উত্তর:


13

সাধারণভাবে, যে কোনও ফাংশন যা নেটওয়ার্কিং করে বা সময়ের সাথে সময়কালের জন্য টাইমার ব্যবহার করে তা অবিচ্ছিন্ন হবে।

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

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

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


1
অতিরিক্ত নোট হিসাবে কিছু জাভাস্ক্রিপ্ট ফাংশনগুলি তাদের পরামিতিগুলির উপর নির্ভর করে উভয় অবরুদ্ধ এবং অবরুদ্ধ are উদাহরণস্বরূপ, XMLHttpRequest.openএকটি বুলিয়ান asyncপ্যারামিটার রয়েছে যা পরবর্তী কলটি সংশ্লেষীয় কিনা তা নিয়ন্ত্রণ করে send
ব্রায়ান

আমি এই উত্তরটি সহায়ক এবং সাধারণভাবে ব্যাখ্যা করে খুঁজে পাই নি।
মেহেদী রাশ

@ মেহেদিআকাশ - এর উত্তরটি হ'ল ডকুমেন্টেশন বা ইন্টারফেস থেকে আপনি এটিকে বের করেছেন। অন্য কোন উপায় নেই। এটাই বলছে। আপনি কী আশা করেছিলেন তা নিশ্চিত নয়। কোনও ম্যাজিক বুলেট উত্তর নেই।
jender00

6

আমি যা বুঝতে পারছি তুমি কি সম্পর্কে জিজ্ঞাসা করা করছি না থেকে আপনি অ্যাসিঙ্ক্রোনাস করা উচিত কিন্তু কিভাবে একটি ফাংশন অ্যাসিঙ্ক্রোনাস হলে বলতে।

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

এটি একমাত্র সম্পূর্ণ নির্ভরযোগ্য উপায়।

এখন অনুমান করার জন্য।

  • যদি এটি একটি কলব্যাক গ্রহণ করে বা কোনও প্রতিশ্রুতি দেয় তবে সম্ভবত এটি অবিচ্ছিন্ন (আমি এই নিয়মের ব্যতিক্রম দেখেছি)
  • সাধারণত নোড.জেএস এবং আরও সাধারণভাবে জাভাস্ক্রিপ্ট-এ সম্পর্কিত যা কিছু I / O এর সাথে সংযুক্তি সম্পন্ন হয় (আমি সেই নিয়মের ব্যতিক্রমও দেখেছি)

4

যেহেতু জাভাস্ক্রিপ্টটি এককভাবে সমস্ত প্রক্রিয়াকরণ ব্লক থ্রেডেড রয়েছে যতক্ষণ না নীচের কোনওটি ঘটে

1) বর্তমান প্রয়োগটি একটি বাহ্যিক পরিষেবা যেমন I / O বা নেটওয়ার্কিংয়ের অনুরোধ, বা ওয়েবকর্মী অনুরোধের অনুরোধ করে

2) একটি ফাংশন কল একটি টাইমার উপর দেওয়া হয় পরবর্তী সময়ে কার্যকর করা হবে

অবরুদ্ধ / অবরুদ্ধকরণ ফাংশনগুলির কোনও তালিকা নেই। আপনার ডকুমেন্টেশন চেক করা উচিত।

আপনার অ্যাপ্লিকেশন একটি জাতির শর্তের মুখোমুখি হতে পারে যদি একাধিক বাহ্যিক পরিষেবাদি জাভাস্ক্রিপ্ট থ্রেডে লক থাকে এবং একই সাথে এটি অ্যাক্সেস করার চেষ্টা করে। আধুনিক ব্রাউজারগুলি এবং ভি 8 ইঞ্জিন এটি পরিচালনা করে তবে আপনি যদি মোবাইল ফোন ব্যবহার করেন এবং মোবাইল ডিভাইসের জন্য জাভাস্ক্রিপ্ট অ্যাপ্লিকেশন লেখেন তবে আপনি এই রেসের শর্তের মুখোমুখি হতে পারেন। সমর্থন এই রেস শর্তাদি পরিচালনা করার জন্য নেই।

সাধারণভাবে, কলব্যাক না থাকলে কোড ব্লক ধরে নিন। এমনকি কলব্যাক থাকলেও এর অর্থ এই নয় যে এটি আটকাবে না।


-1

আমিও নোড.জেএসে (এবং সাধারণভাবে জাভাস্ক্রিপ্ট) নতুন এবং আমি এতটা অ্যাসিনক্রোনাস কোডে অভ্যস্ত নই। আমি শুধু নির্দেশ যে চেয়েছিলেন বনাম অ-অবরোধ ব্লকিং সংক্ষিপ্ত বিবরণ উপর nodejs.org এটা যে বলে:

নোড.জেএস স্ট্যান্ডার্ড লাইব্রেরির সমস্ত আই / ও পদ্ধতি অ্যাসিনক্রোনাস সংস্করণ সরবরাহ করে যা অ-ব্লক করা হয় না এবং কলব্যাক ফাংশন গ্রহণ করে। কিছু পদ্ধতিতে ব্লক করা অংশগুলিও থাকে, যার নাম সিঙ্কের সাথে শেষ হয়।


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