অ্যাসিনক্রোনাস এবং নন-ব্লকিং কলগুলির মধ্যে পার্থক্য কী? এছাড়াও ব্লকিং এবং সিঙ্ক্রোনাস কলগুলির মধ্যে (উদাহরণ সহ দয়া করে)?
অ্যাসিনক্রোনাস এবং নন-ব্লকিং কলগুলির মধ্যে পার্থক্য কী? এছাড়াও ব্লকিং এবং সিঙ্ক্রোনাস কলগুলির মধ্যে (উদাহরণ সহ দয়া করে)?
উত্তর:
অনেক পরিস্থিতিতে তারা একই জিনিসটির জন্য আলাদা আলাদা নাম, তবে কিছু কিছু ক্ষেত্রে এগুলি একেবারেই আলাদা। সুতরাং এটি নির্ভর করে। টার্মিনোলজি পুরো সফটওয়্যার ইন্ডাস্ট্রিতে পুরোপুরি ধারাবাহিক উপায়ে প্রয়োগ করা হয় না।
উদাহরণস্বরূপ ক্লাসিক সকেট এপিআই-তে, একটি অ-ব্লকিং সকেট হ'ল যা তাত্ক্ষণিকভাবে একটি বিশেষ "উইল ব্লক" ত্রুটি বার্তা নিয়ে আসে, যেখানে একটি ব্লকিং সকেট ব্লক করে দিত। আপনাকে একটি পৃথক ফাংশন ব্যবহার করতে হবে যেমন select
বা poll
আবার চেষ্টা করার উপযুক্ত সময় কখন তা খুঁজে বের করতে হবে।
তবে অ্যাসিঙ্ক্রোনাস সকেট (উইন্ডোজ সকেট দ্বারা সমর্থিত), বা .NET এ ব্যবহৃত অ্যাসিনক্রোনাস আইও প্যাটার্ন আরও সুবিধাজনক। কোনও ক্রিয়াকলাপ শুরু করার জন্য আপনি একটি পদ্ধতি কল করেন এবং ফ্রেমওয়ার্কটি শেষ হয়ে গেলে আপনাকে আবার কল করে। এমনকি এখানেও মূল পার্থক্য রয়েছে। অ্যাসিঙ্ক্রোনাস উইন 32 সকেটগুলি উইন্ডো বার্তাগুলি প্রেরণ করে একটি নির্দিষ্ট জিইউআই থ্রেডের উপর তাদের ফলাফল "মার্শাল" করে, যখন .NET অ্যাসিঙ্ক্রোনাস আইও ফ্রি-থ্রেডড হয় (আপনি জানেন না কী থ্রেডে আপনার কলব্যাক কল হবে)।
সুতরাং তারা সর্বদা একই জিনিস বোঝায় না। সকেটের উদাহরণটি নিষ্ক্রিয় করতে, আমরা বলতে পারি:
সিঙ্ক্রোনাস / অ্যাসিনক্রোনাস হ'ল দুটি মডিউলের মধ্যে সম্পর্ক বর্ণনা করা।
ব্লকিং / নন-ব্লকিং হ'ল একটি মডিউলের পরিস্থিতি বর্ণনা করা।
একটি উদাহরণ:
মডিউল এক্স: "আমি"।
মডিউল ওয়াই: "বইয়ের দোকান"।
এক্স ওয়াইকে জিজ্ঞেস করে: আপনার কাছে "সি ++ প্রাইমার" নামে একটি বই আছে?
1) ব্লক করা: Y উত্তর দেওয়ার আগে এক্স, এক্স উত্তরটির জন্য অপেক্ষা করে রাখে। এখন এক্স (একটি মডিউল) ব্লক করছে। এক্স এবং ওয়াই দুটি থ্রেড বা দুটি প্রক্রিয়া বা একটি থ্রেড বা একটি প্রক্রিয়া? আমরা জানি না।
2) অ-অবরুদ্ধকরণ: ওয়াই এক্স এর উত্তর দেওয়ার আগে এক্স এক্স কেবল সেখানে চলে যায় এবং অন্যান্য কাজ করে। এক্স প্রতি দুই মিনিট পরে ফিরে আসতে পারে যদি Y কাজ শেষ করে ফেলেছে কি না? অথবা এক্স তাকে ফিরে না আসা পর্যন্ত ফিরে আসবে না? আমরা জানি না। আমরা কেবল জানি যে ওয়াই এর কাজ শেষ করার আগে এক্স অন্যান্য কাজ করতে পারে। এখানে এক্স (একটি মডিউল) অবরুদ্ধ ocking এক্স এবং ওয়াই দুটি থ্রেড বা দুটি প্রক্রিয়া বা একটি প্রক্রিয়া? আমরা জানি না। তবে আমরা নিশ্চিত যে এক্স এবং ওয়াই একটি থ্রেড হতে পারে না।
৩) সিঙ্ক্রোনাস: ওয়াই এক্স এর উত্তর দেওয়ার আগে, এক্স উত্তরটির জন্য অপেক্ষা করতে থাকে। এর অর্থ হ'ল ওয়াই এর কাজ শেষ না করা পর্যন্ত এক্স চালিয়ে যেতে পারে না। এখন আমরা বলি: এক্স এবং ওয়াই (দুটি মডিউল) সমকালীন। এক্স এবং ওয়াই দুটি থ্রেড বা দুটি প্রক্রিয়া বা একটি থ্রেড বা একটি প্রক্রিয়া? আমরা জানি না।
৪) অ্যাসিঙ্ক্রোনাস: ওয়াই এক্স এর উত্তর দেওয়ার আগে, এক্স সেখানে ছেড়ে যায় এবং এক্স অন্যান্য কাজ করতে পারে। ওয়াই তাকে ফোন না করা পর্যন্ত এক্স ফিরে আসবে না। এখন আমরা বলি: এক্স এবং ওয়াই (দুটি মডিউল) অ্যাসিনক্রোনাস। এক্স এবং ওয়াই দুটি থ্রেড বা দুটি প্রক্রিয়া বা একটি প্রক্রিয়া? আমরা জানি না। তবে আমরা নিশ্চিত যে এক্স এবং ওয়াই একটি থ্রেড হতে পারে না।
উপরোক্ত দুটি গা .়-বাক্যগুলিতে মনোযোগ দিন। ২) এর গা bold়-বাক্যটিতে কেন দুটি মামলা রয়েছে যেখানে ৪-এ বোল্ড বাক্যটি রয়েছে) কেবল একটিই মামলা রয়েছে? এটি অবরুদ্ধকরণ এবং অ্যাসিনক্রোনাসের মধ্যে পার্থক্যের একটি মূল বিষয়।
নন-ব্লকিং এবং সিঙ্ক্রোনাস সম্পর্কে এখানে একটি আদর্শ উদাহরণ:
// thread X
while (true)
{
msg = recv(Y, NON_BLOCKING_FLAG);
if (msg is not empty)
{
break;
}
sleep(2000); // 2 sec
}
// thread Y
// prepare the book for X
send(X, book);
আপনি দেখতে পাচ্ছেন যে এই নকশাটি অ-ব্লক করা হয়েছে (আপনি বলতে পারেন যে এই লুপটি বেশিরভাগ সময় বাজে কিছু করে তবে সিপিইউয়ের চোখে এক্স চলমান, যার অর্থ এক্স অ-ব্লকিং) অন্যদিকে এক্স এবং ওয়াই সংশ্লেষযুক্ত কারণ এক্স করতে পারে ওয়াইয়ের কাছ থেকে বই না পাওয়া পর্যন্ত অন্য কোনও কাজ করা (এক্স লুপ থেকে লাফিয়ে উঠতে পারে না)
সাধারণভাবে এই ক্ষেত্রে এক্স ব্লকিংটি আরও ভাল করা কারণ নন-ব্লকিং একটি বোকা লুপের জন্য প্রচুর সংস্থান ব্যয় করে। তবে এই উদাহরণটি আপনাকে সত্যটি বুঝতে সাহায্য করার জন্য ভাল: অ-ব্লক করা মানে অ্যাসিঙ্ক্রোনাস নয়।
চারটি শব্দ আমাদের সহজেই বিভ্রান্ত করে তোলে, আমাদের কী মনে রাখা উচিত তা হ'ল চারটি শব্দ স্থাপত্যের নকশার জন্য পরিবেশন করে। কীভাবে একটি ভাল আর্কিটেকচার ডিজাইন করা যায় তা শিখাই তাদের পার্থক্য করার একমাত্র উপায়।
উদাহরণস্বরূপ, আমরা এই জাতীয় ধরণের আর্কিটেকচার ডিজাইন করতে পারি:
// Module X = Module X1 + Module X2
// Module X1
while (true)
{
msg = recv(many_other_modules, NON_BLOCKING_FLAG);
if (msg is not null)
{
if (msg == "done")
{
break;
}
// create a thread to process msg
}
sleep(2000); // 2 sec
}
// Module X2
broadcast("I got the book from Y");
// Module Y
// prepare the book for X
send(X, book);
এখানে উদাহরণে, আমরা এটি বলতে পারি
আপনার যদি প্রয়োজন হয় তবে আপনি এক্স 1 এ তৈরি হওয়া থ্রেডগুলিও চারটি শব্দের সাহায্যে বর্ণনা করতে পারেন।
আরও গুরুত্বপূর্ণ বিষয়গুলি: আমরা কখন অ্যাসিক্রোনাসের পরিবর্তে সিঙ্ক্রোনাস ব্যবহার করি? আমরা কখন অবরুদ্ধকরণের পরিবর্তে ব্লকিং ব্যবহার করব?
কেন এনগিনেক্স অ-ব্লক করছে? আপাচে বাধা দিচ্ছে কেন?
একটি ভাল পছন্দ করতে, আপনাকে অবশ্যই নিজের প্রয়োজন বিশ্লেষণ করতে হবে এবং বিভিন্ন স্থাপত্যের পারফরম্যান্স পরীক্ষা করতে হবে। এমন কোনও স্থাপত্য নেই যা বিভিন্ন প্রয়োজনের জন্য উপযুক্ত।
এই প্রশ্নটি জাভা 7-এ এনআইও এবং এনআইও 2 এর প্রসঙ্গে রেখে, অ্যাসিঙ্ক আইও অবরুদ্ধকরণের চেয়ে আরও এক ধাপ উন্নত। জাভা এনআইও নন-ব্লকিং কলগুলির সাথে, কল করে সমস্ত চ্যানেল (সকেট চ্যানেল, সার্ভারসকেট চ্যানেল, ফাইলচ্যানেল ইত্যাদি) সেট করে AbstractSelectableChannel.configureBlocking(false)
। এই আইও কলগুলি রিটার্ন করার পরে, তবে আপনাকে সম্ভবত এখনও চেকগুলি নিয়ন্ত্রণ করতে হবে যেমন কখন এবং কখন আবার পড়তে / লিখতে হবে ইত্যাদি
উদাহরণস্বরূপ,
while (!isDataEnough()) {
socketchannel.read(inputBuffer);
// do something else and then read again
}
জাভা 7-তে অ্যাসিঙ্ক্রোনাস এপিআই সহ, এই নিয়ন্ত্রণগুলি আরও বহুমুখী উপায়ে তৈরি করা যেতে পারে। 2 টির মধ্যে একটি উপায় ব্যবহার করা CompletionHandler
। লক্ষ্য করুন যে দুটি read
কলই অবরুদ্ধ ocking
asyncsocket.read(inputBuffer, 60, TimeUnit.SECONDS /* 60 secs for timeout */,
new CompletionHandler<Integer, Object>() {
public void completed(Integer result, Object attachment) {...}
public void failed(Throwable e, Object attachment) {...}
}
}
FileChannel
নির্বাচনযোগ্য নয় এবং নন-ব্লকিংয়ের জন্য কনফিগার করা যায় না।
আপনি সম্ভবত বিভিন্ন (এবং প্রায়শই পারস্পরিক একচেটিয়া) উত্তরগুলির ভিড় থেকে দেখতে পাচ্ছেন, এটি আপনি কাকে জিজ্ঞাসা করছেন তার উপর নির্ভর করে। কিছু কিছু ক্ষেত্রে শব্দের সমার্থক শব্দ রয়েছে। অথবা তারা প্রত্যেকে দুটি অনুরূপ ধারণার উল্লেখ করতে পারে:
উভয় ক্ষেত্রেই, উদ্দেশ্যটি হ'ল ধীর প্রক্রিয়াটি শেষ হওয়ার অপেক্ষায় প্রোগ্রামটিকে অবরুদ্ধ করার অনুমতি দেওয়া নয় - প্রোগ্রামটি কীভাবে প্রতিক্রিয়া প্রত্যাশা করে তা একমাত্র আসল পার্থক্য। কোন শব্দটি প্রোগ্রামার থেকে প্রোগ্রামার, ভাষা থেকে ভাষা, বা প্ল্যাটফর্মের প্ল্যাটফর্মে পরিবর্তিত হয় তা বোঝায়। বা শর্তাদি সম্পূর্ণ আলাদা ধারণা (যেমন থ্রেড প্রোগ্রামিংয়ের ক্ষেত্রে সিঙ্ক্রোনাস / অ্যাসিনক্রোনাসের ব্যবহার) বোঝাতে পারে।
দুঃখিত, তবে আমি বিশ্বাস করি না যে বিশ্বব্যাপী সত্য একটি সঠিক উত্তর আছে।
একটি নন-ব্লকিং কল যে কোনও ডেটা উপলভ্য সাথে সাথেই রিটার্ন দেয়: অনুরোধ করা বাইটের পুরো সংখ্যা, কম বা মোটেও নয়।
একটি অ্যাসিঙ্ক্রোনাস কল একটি স্থানান্তরের অনুরোধ করে যা এর সম্পূর্ণ (সম্পূর্ণতা) তে সঞ্চালিত হবে তবে ভবিষ্যতের কিছু সময় সম্পূর্ণ হবে।
অবরুদ্ধকরণ: স্ট্যাকের সময় এই ফাংশনটি অপেক্ষা করবে না।
অ্যাসিনক্রোনাস: কলটি স্ট্যাকটি ছেড়ে যাওয়ার পরে ফাংশন কলের পক্ষে কাজ চালিয়ে যেতে পারে
সিঙ্ক্রোনাস একই সময়ে ঘটছে হিসাবে সংজ্ঞায়িত করা হয়।
অ্যাসিঙ্ক্রোনাস একই সময়ে ঘটছে না হিসাবে সংজ্ঞায়িত করা হয়।
এটিই প্রথম বিভ্রান্তির কারণ হয়। সমকালীন আসলে সমান্তরাল হিসাবে পরিচিত। অ্যাসিনক্রোনাস ক্রমযুক্ত হলেও, এটি করুন, তারপরে এটি করুন।
এখন পুরো সমস্যাটি একটি অ্যাসিনক্রোনাস আচরণের মডেলিং সম্পর্কে, কারণ আপনি এমন কিছু অপারেশন পেয়েছেন যার শুরু হওয়ার আগে অন্যটির প্রতিক্রিয়া প্রয়োজন। সুতরাং এটি একটি সমন্বয়ের সমস্যা, আপনি কীভাবে জানবেন যে আপনি এখন এই অপারেশন শুরু করতে পারেন?
সহজ সমাধানটি ব্লকিং হিসাবে পরিচিত।
অবরুদ্ধকরণ হ'ল আপনি যখন অন্য কাজটি হয়ে যাবার জন্য কেবল অপেক্ষা করতে চান এবং যে অপারেশনটির প্রয়োজন হয় তার দিকে এগিয়ে যাওয়ার আগে আপনাকে প্রতিক্রিয়া ফিরিয়ে দেন।
সুতরাং আপনার যদি টোস্টে মাখন লাগাতে হয় এবং এইভাবে আপনাকে প্রথমে ব্রেড টোস্ট করতে হবে। আপনি তাদেরকে যেভাবে সমন্বয় করতে চান তা হ'ল আপনি প্রথমে ব্রেড টোস্ট করুন, তারপরে টোস্টে অবিরামভাবে তাকিয়ে থাকুন যতক্ষণ না এটি টোস্টটি পপ করে না যায় এবং তারপরে আপনি তাদের উপর মাখন লাগিয়ে যাবেন।
এটি সহজ সমাধান, এবং খুব ভাল কাজ করে। এটি ব্যবহার না করার কোনও সত্যিকারের কারণ নেই, যদি না আপনার যদি অন্য কাজগুলি করার দরকার হয় যা অপারেশনগুলির সাথে সমন্বয়ের প্রয়োজন হয় না। উদাহরণস্বরূপ, কিছু থালা - বাসন করা। টোস্টটি পপ হওয়ার জন্য ক্রমাগত টোস্টের দিকে তাকিয়ে থাকতে নিষেধ কেন অপেক্ষা করুন, যখন আপনি জানেন যে এটি কিছুটা সময় নেবে, এবং এটি শেষ হয়ে গেলে আপনি একটি পুরো থালা ধুয়ে ফেলতে পারেন?
অমন-ব্লকিং এবং অ্যাসিনক্রোনাস হিসাবে যথাক্রমে পরিচিত আরও দুটি সমাধান কার্যকর হয় That's
অ-অবরোধঅপারেশনটি হয় যখন আপনি অপারেশনটি সম্পন্ন হওয়ার অপেক্ষায় থাকাকালীন অন্যান্য সম্পর্কিত সম্পর্কযুক্ত কাজগুলি করতে পছন্দ করেন। আপনি যথাযথ দেখতে পাওয়ায় প্রতিক্রিয়াটির উপলভ্যতাটি পরীক্ষা করে দেখছেন।
সুতরাং এটি পপ করার জন্য টাস্টারের দিকে তাকানোর পরিবর্তে। আপনি গিয়ে পুরো থালা ধুয়ে ফেলুন। এবং তারপরে টোস্টগুলি পপ হয়েছে কিনা তা দেখতে আপনি টোস্টের দিকে তাকাবেন। যদি তারা না থাকে তবে আপনি অন্য থালা ধুয়ে যান এবং প্রতিটি থালার মধ্যে টোস্টারে ফিরে যাচ্ছেন। যখন আপনি দেখবেন টোস্টগুলি পপ হয়েছে, আপনি থালাগুলি ধুয়ে ফেলবেন এবং তার পরিবর্তে আপনি টোস্টটি নিয়ে তার উপর মাখন লাগিয়ে যান।
টোস্টগুলিতে নিয়মিত চেক করা বিরক্তিকর হতে পারে, তবে কল্পনা করুন যে টোস্টারটি অন্য ঘরে রয়েছে। থালা বাসনগুলির মধ্যে আপনি টস্টটি পরীক্ষা করতে অন্য রুমে যাওয়ার সময় নষ্ট করেন।
এখানে এসিনক্রোনাস আসে।
অসমনিয়তঅপারেশনটি সম্পন্ন হওয়ার অপেক্ষার সময় আপনি যখন অপ্রাসঙ্গিক কাজগুলি করতে পছন্দ করেন তখন হয়। যদিও এটি যাচাইয়ের পরিবর্তে, আপনি অন্য কোনও কিছুতে যাচাইয়ের কাজটি অর্পণ করেন, নিজেই অপারেশন বা একজন নজরদার হতে পারেন এবং প্রতিক্রিয়াটি উপলভ্য হলে আপনি সেই জিনিসটি অবহিত করতে পারেন এবং সম্ভবত আপনাকে বিভক্ত করে তোলেন যাতে আপনি অন্য অপারেশনটিতে এগিয়ে যেতে পারেন এটি প্রয়োজন।
এটি একটি অদ্ভুত পরিভাষা। পুরোপুরি অর্থবহ করে না, যেহেতু এই সমস্ত সমাধান নির্ভরশীল কাজের সমন্বয়হীন সমন্বয় তৈরির উপায়। এজন্য আমি এটিকে সন্নিবিষ্ট বলা পছন্দ করি।
সুতরাং এইটির জন্য, আপনি নিজের টোস্টারকে আপগ্রেড করার সিদ্ধান্ত নিয়েছেন যাতে টোস্টগুলি সম্পন্ন হওয়ার পরে এটি বীপ হয়। আপনি থালা রান্না করার সময়ও নিয়মিত শুনছেন। বীপ শুনে আপনি আপনার স্মৃতিতে সারি বেঁধে রাখবেন যে আপনি আপনার বর্তমান থালাটি ধুয়ে শেষ করার সাথে সাথে আপনি থামবেন এবং টোস্টে মাখন লাগিয়ে যাবেন। অথবা আপনি বর্তমান থালাটি ধুয়ে ফেলতে এবং টোস্টটি সঙ্গে সঙ্গে ডিল করতে বেছে নিতে পারেন।
আপনার যদি বীপ শুনতে সমস্যা হয়, আপনি আপনার সঙ্গীকে আপনার জন্য টোস্টারটি দেখতে পারেন এবং টোস্ট প্রস্তুত হওয়ার সময় আপনাকে বলতে পারেন। টোস্টারটি দেখার এবং এটি প্রস্তুত হওয়ার সময় আপনাকে বলার কাজটি সমন্বিত করার জন্য আপনার অংশীদার নিজেই উপরের তিনটি কৌশলগুলির মধ্যে কোনওটি বেছে নিতে পারেন।
একটি চূড়ান্ত নোটে, এটি বোঝা ভাল যে অবরুদ্ধকরণ এবং অ্যাসিঙ্ক (বা যা আমি সন্ধ্যায় বলতে পছন্দ করি) অপেক্ষা করার সময় আপনাকে অন্যান্য জিনিস করার অনুমতি দেয়, আপনার খুব বেশি কিছু নেই। আপনি অন্য কোনও কিছু না করেই অ-ব্লক করা কলটির স্থিতি পরীক্ষা করে ক্রমাগত লুপ বেছে নিতে পারেন। এটি প্রায়শই ব্লক করা থেকে খারাপ (যেমনটি টোস্টারকে দেখার মতো, তারপরে দূরে, তারপরে এটি ফিরে হওয়া পর্যন্ত ফিরে আসা), সুতরাং প্রচুর অ-ব্লকিং এপিআই আপনাকে এ থেকে একটি ব্লকিং মোডে রূপান্তর করতে দেয়। সন্ধ্যার জন্য, আপনাকে অবহিত না করা পর্যন্ত আপনি কেবল অলস অপেক্ষা করতে পারেন। এই ক্ষেত্রে ক্ষতির দিকটি হ'ল প্রজ্ঞাপনটি যুক্ত করা জটিল এবং সম্ভাব্য ব্যয়বহুল ছিল। আপনাকে বীপের কার্যকারিতা সহ একটি নতুন টোস্টার কিনতে হয়েছিল, বা আপনার সঙ্গীকে আপনার জন্য এটি দেখতে রাজি করানো হয়েছিল।
এবং আরও একটি বিষয়, আপনার তিনটি সরবরাহ করা বাণিজ্য বন্ধ উপলব্ধি করা দরকার need এক অন্যদের থেকে স্পষ্টতই ভাল হয় না। আমার উদাহরণটি চিন্তা করুন। যদি আপনার টোস্টারটি এত তাড়াতাড়ি হয় তবে আপনার কোনও থালা ধোয়ার সময় হবে না, এমনকি এটি ধোয়া শুরুও করবেন না, এটিই আপনার টোস্টারটি কত দ্রুত। সেক্ষেত্রে অন্য কোনও কিছুর জন্য শুরু করা কেবল সময় এবং শ্রমের অপচয়। ব্লকিং করবে। একইভাবে, যদি কোনও ডিশ ধুতে 10 গুণ বেশি সময় লাগে তবে টোস্টিং। নিজেকে জিজ্ঞাসা করতে হবে যে কাজটি করার জন্য আরও গুরুত্বপূর্ণ কী? টোস্টটি ততক্ষণে শীতল এবং শক্ত হয়ে উঠতে পারে, এটির মূল্য নয়, ব্লক করাও তা করবে। অথবা অপেক্ষা করার সময় আপনার কাছে দ্রুত কাজ করা উচিত। আরও স্পষ্টতই রয়েছে, তবে আমার উত্তর ইতিমধ্যে বেশ দীর্ঘ
সম্পাদনা:
যদিও এটি ইতিমধ্যে দীর্ঘ, আমি এটিও সম্পূর্ণ হওয়া চাই, সুতরাং আমি আরও দুটি পয়েন্ট যুক্ত করব।
1) এছাড়াও সাধারণত এক চতুর্থ মডেল বিদ্যমান মাল্টিপ্লেক্স হিসাবে পরিচিত । এটি যখন আপনি একটি কাজের জন্য অপেক্ষা করেন, আপনি অন্যটি শুরু করেন, এবং আপনি উভয়ের জন্য অপেক্ষা করার পরে, আপনি আরও একটি শুরু করেন, এবং এভাবেই, যতক্ষণ না আপনার সমস্ত কাজ শুরু হয়ে যায় এবং তারপরে, আপনি নিষ্ক্রিয় অপেক্ষা করেন, তবে সমস্ত কিছুতে তাদের। সুতরাং যে কোনও কাজ শেষ হওয়ার সাথে সাথে আপনি এর প্রতিক্রিয়া পরিচালনা করে এগিয়ে যেতে পারেন এবং তারপরে অন্যের জন্য অপেক্ষা করতে ফিরে যেতে পারেন। এটি মাল্টিপ্লেক্সড হিসাবে পরিচিত, কারণ আপনি অপেক্ষা করার সময় আপনার প্রতিটি কাজ একের পর এক পরীক্ষা করে দেখতে হবে যে সেগুলি সম্পন্ন হয়েছে কিনা, এটি সাধারণ অ-ব্লক করার শীর্ষে কিছুটা এক্সটেনশান।
আমাদের উদাহরণে এটি টোস্টার শুরু করার মতো হবে, তারপরে ডিশ ওয়াশার, তারপরে মাইক্রোওয়েভ ইত্যাদি এবং তারপরে যে কোনওটির জন্য অপেক্ষা করা। টাস্টারটি যেখানে সম্পন্ন হয়েছে তা দেখার জন্য যেখানে এটি সম্পন্ন হয়েছে কিনা, যদি না হয় তবে আপনি ডিশ ওয়াশারটি পরীক্ষা করেন, না হলে, মাইক্রোওয়েভ এবং আবারও check
2) যদিও আমি এটি একটি বড় ভুল বলে বিশ্বাস করি তবুও সিনক্রোনাস প্রায়শই একবারে একটি জিনিস বোঝাতে ব্যবহৃত হয়। এবং একসাথে অ্যাসিনক্রোনাস অনেক জিনিস। সুতরাং আপনি ব্লকিং এবং অ-ব্লকিংয়ের জন্য ব্যবহৃত সিঙ্ক্রোনাস ব্লকিং এবং অ-ব্লকিং দেখতে পাবেন। এবং অ্যাসিঙ্ক্রোনাস ব্লকিং এবং নন-ব্লকিং মাল্টিপ্লেক্সড এবং সানডে রেফারেন্স হিসাবে ব্যবহৃত হয়।
আমরা কীভাবে সেখানে পৌঁছেছি তা সত্যি বুঝতে পারছি না। কিন্তু যখন এটি আইও এবং গণনার ক্ষেত্রে আসে, তখন সিঙ্ক্রোনাস এবং অ্যাসিনক্রোনাস প্রায়শই এমন বিষয়টিকে বোঝায় যা অ-ওভারল্যাপড এবং ওভারল্যাপযুক্ত হিসাবে বেশি পরিচিত। অর্থাত, অ্যাসিক্রোনাস অর্থ আইও এবং গণনাটি ওভারল্যাপ করা হয়, ওরফে একই সাথে ঘটছে। যদিও সিঙ্ক্রোনাস অর্থ তারা নন, এভাবে ক্রমানুসারে ঘটছে। সিঙ্ক্রোনাস অ-ব্লক করার জন্য, এর অর্থ হ'ল আপনি অন্য আইও বা গণনা শুরু করবেন না, আপনি কেবলমাত্র ব্যস্ত অপেক্ষা করুন এবং একটি ব্লকিং কলটি অনুকরণ করুন। আমি আশা করি লোকেরা এর মতো সিনক্রোনাস এবং অ্যাসিনক্রোনাসের অপব্যবহার বন্ধ করে দেয়। সুতরাং আমি এটি উত্সাহিত করছি না।
ব্লকিং কল: কলটি সম্পূর্ণ হলেই নিয়ন্ত্রণ ফিরে আসে।
অবরুদ্ধ কল: নিয়ন্ত্রণ তত্ক্ষণাত্ ফিরে আসে। পরে ওএস কোনওভাবে কলটি সম্পূর্ণ হওয়ার প্রক্রিয়াটি অবহিত করে।
সিঙ্ক্রোনাস প্রোগ্রাম: একটি প্রোগ্রাম যা ব্লকিং কল ব্যবহার করে। কল চলাকালীন স্থির না হওয়ার জন্য এটিতে 2 বা ততোধিক থ্রেড থাকতে হবে (এজন্য এটিকে সিঙ্ক্রোনাস বলা হয় - থ্রেডগুলি সিঙ্ক্রোনিকভাবে চলছে)।
অ্যাসিঙ্ক্রোনাস প্রোগ্রাম: এমন একটি প্রোগ্রাম যা নন ব্লকিং কল ব্যবহার করে। এটিতে কেবল 1 টি থ্রেড থাকতে পারে এবং এখনও ইন্টারেক্টিভ থেকে যায়।
তারা শুধুমাত্র বানানেই আলাদা হয়। তারা যা উল্লেখ করেছে তাতে কোনও পার্থক্য নেই। প্রযুক্তিগত হতে আপনি বলতে পারেন যে তারা জোরের মধ্যে পৃথক। অ-ব্লকিং নিয়ন্ত্রণ প্রবাহকে বোঝায় (এটি আটকে না
আই / ও শুরু হয়ে গেলে ব্লক করা মডেলগুলিকে অবরুদ্ধকরণের জন্য অ্যাপ্লিকেশনটির প্রয়োজন। এর অর্থ হ'ল একই সাথে প্রসেসিং ও আই / ওভার ওভারল্যাপ করা সম্ভব নয়। সিঙ্ক্রোনাস অ-ব্লকিং মডেল প্রসেসিং এবং আই / ওভারের ওভারল্যাপের অনুমতি দেয় তবে এর জন্য প্রয়োজন অ্যাপ্লিকেশনটি পুনরাবৃত্তির ভিত্তিতে I / O এর স্থিতি পরীক্ষা করে। এটি অ্যাসিঙ্ক্রোনাস অ-ব্লকিং আই / ও ছেড়ে যায়, যা প্রসেসিংয়ের ওভারল্যাপের অনুমতি দেয় এবং আই / ও সমাপ্তির বিজ্ঞপ্তি সহ।
ব্লকিং: প্রিমিটিভ (সিঙ্ক বা অ্যাসিঙ্ক) সম্পন্ন হওয়ার পরে প্রসেসিং ইনকোসিং প্রসেসে নিয়ন্ত্রণ ফিরে আসে
অবরুদ্ধকরণ: আমন্ত্রণের সাথে সাথে প্রক্রিয়াতে ফিরে আসা নিয়ন্ত্রণ করে