অ্যাসিঙ্ক্রোনাস বনাম অ-ব্লক করা


373

অ্যাসিনক্রোনাস এবং নন-ব্লকিং কলগুলির মধ্যে পার্থক্য কী? এছাড়াও ব্লকিং এবং সিঙ্ক্রোনাস কলগুলির মধ্যে (উদাহরণ সহ দয়া করে)?


4

1
<ইউনিক্স নেটওয়ার্কিং প্রোগ্রামিং> কলাম 1, অধ্যায় 6 বইটি পড়ার সময় আমি পার্থক্যগুলি সম্পর্কে ভাল ধারণা পেয়েছি
বিন

2
একটি আকর্ষণীয় নিবন্ধ: অ্যাসিঙ্ক্রোনাস আই / ও ব্যবহার করে অ্যাপ্লিকেশন কর্মক্ষমতা বাড়ান । এটি আই / ও দৃষ্টিকোণগুলিকে 4 টি বিভাগে শ্রেণিবদ্ধ করেছে: (1) ব্লকিং + সিঙ্ক্রোনাস, (2) অ-ব্লকিং + সিঙ্ক্রোনাস, (3) ব্লকিং + অ্যাসিঙ্ক্রোনাস, এবং (4) অ-ব্লকিং + অ্যাসিনক্রোনাস।
এমএস দৌস্তি

@ এমএসডুস্টি আমাকে বলা হয়েছিল যে গুগল বিশেষজ্ঞের কাছ থেকে এটি কিছু উপায়ে ভুল।
রিক

@ এমএসডৌস্টি কিছু অধ্যয়নের পরে, আমি মনে করি যে কোনও মন্তব্য (3) এবং (2) আপনার মন্তব্যগুলিতে বর্ণিত হিসাবে নেই con অ্যাসিঙ্ক্রোনাসের সংজ্ঞাটি পরীক্ষা করে দেখুন, এটি নন-ব্লকিংয়ের একই জিনিসটির কথা বলছে। আপনি উপরের উত্তর দেখতে পারেন এটি আমার মতামত নিশ্চিত করে। পোলিং এবং কলব্যাক ফাংশন কেবল অ্যাসিনক্রোনাস বাস্তবায়নের উপায় / নিদর্শন। হ্যাঁ, আমি বলছি যে ব্লকিং, সিঙ্ক্রোনাস এবং নন-ব্লকিং, অ্যাসিনক্রোনাস সমার্থক 2 জোড়া।
রিক

উত্তর:


304

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

উদাহরণস্বরূপ ক্লাসিক সকেট এপিআই-তে, একটি অ-ব্লকিং সকেট হ'ল যা তাত্ক্ষণিকভাবে একটি বিশেষ "উইল ব্লক" ত্রুটি বার্তা নিয়ে আসে, যেখানে একটি ব্লকিং সকেট ব্লক করে দিত। আপনাকে একটি পৃথক ফাংশন ব্যবহার করতে হবে যেমন selectবা pollআবার চেষ্টা করার উপযুক্ত সময় কখন তা খুঁজে বের করতে হবে।

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

সুতরাং তারা সর্বদা একই জিনিস বোঝায় না। সকেটের উদাহরণটি নিষ্ক্রিয় করতে, আমরা বলতে পারি:

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

রাষ্ট্রীয় আইও সমাপ্তির চেয়ে প্রস্তুত রাষ্ট্র আইও; লিনাক্স libaio দেখতে
উইল

4
শর্তাবলী প্রসঙ্গে সংবেদনশীল এবং মাঝে মধ্যে অসম্পূর্ণভাবে ব্যবহার করা যেতে পারে তা নির্দেশ করার জন্য ধন্যবাদ। আমি প্রযুক্তিতে বিশেষত, তবে অন্যান্য ক্ষেত্রগুলিতেও সন্ধান করি যে মাঝে মাঝে যেমন ঘটে থাকে তেমনি সংক্ষিপ্ত সংজ্ঞাটি সঠিক, তা নিয়ে বিতর্কে যাওয়ার চেয়ে এই সত্যটি স্বীকৃতি দেওয়া প্রায়শই বেশি কার্যকর।
চাদ এনবি

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

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

6
নন-ব্লকিং কলটি "ত্রুটি" ফিরিয়ে নেওয়ার পরিবর্তে, আমি মনে করি যে এটি একটি অবরুদ্ধকরণ কল তাত্ক্ষণিকভাবে তাত্ক্ষণিকভাবে সম্পন্ন করা যায়, ততই সঠিকভাবে বলা হবে এবং তারপরে এটি কতটা হয়েছে তা নির্দেশ করে। কিছু ক্রিয়াকলাপের জন্য, যে পরিমাণ কাজ করা হয়েছে তা হয় "সবকিছু" বা "কিছুই নয়", তবে কিছু অন্যান্য ক্রিয়াকলাপ (যেমন প্রবাহ I / O) একটি পরিমাণগত ইঙ্গিত ফিরে আসতে পারে। নন-ব্লকিং শব্দার্থগতভাবে খুব অল্প সময়ের সাথে ব্লক করার সমতুল্য যদি ব্লকিং I / O বাস্তবায়ন একটি অপারেশনকে অনুমতি দেয় যা পরে সময়টি সহজেই পুনরায় চেষ্টা করার চেষ্টা করে (কিছু করে; কিছু না করে)।
সুপারক্যাট

56

সিঙ্ক্রোনাস / অ্যাসিনক্রোনাস হ'ল দুটি মডিউলের মধ্যে সম্পর্ক বর্ণনা করা।
ব্লকিং / নন-ব্লকিং হ'ল একটি মডিউলের পরিস্থিতি বর্ণনা করা।

একটি উদাহরণ:
মডিউল এক্স: "আমি"।
মডিউল ওয়াই: "বইয়ের দোকান"।
এক্স ওয়াইকে জিজ্ঞেস করে: আপনার কাছে "সি ++ প্রাইমার" নামে একটি বই আছে?

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 অ-ব্লক করা
  • এক্স 1 এবং এক্স 2 সিঙ্ক্রোনাস
  • এক্স এবং ওয়াই অ্যাসিঙ্ক্রোনাস

আপনার যদি প্রয়োজন হয় তবে আপনি এক্স 1 এ তৈরি হওয়া থ্রেডগুলিও চারটি শব্দের সাহায্যে বর্ণনা করতে পারেন।

আরও গুরুত্বপূর্ণ বিষয়গুলি: আমরা কখন অ্যাসিক্রোনাসের পরিবর্তে সিঙ্ক্রোনাস ব্যবহার করি? আমরা কখন অবরুদ্ধকরণের পরিবর্তে ব্লকিং ব্যবহার করব?

কেন এনগিনেক্স অ-ব্লক করছে? আপাচে বাধা দিচ্ছে কেন?

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


7
আইএমও সর্বোত্তম উত্তর যেহেতু এটি ধারণার সারমর্মটি ধরেছে: একজন বা দু'জন অংশগ্রহণকারীদের মধ্যে সম্পর্ক।
ফ্যাবিও

1 এবং 3 উভয় মধ্যে, ওয়াই একটি সীমাবদ্ধ সংস্থান হিসাবে কাজ করছে। এক্সকে সহায়তার জন্য আর কোনও ওয়াই নেই
ইউভিএম

46
  • অ্যাসিঙ্ক্রোনাস সমান্তরাল কিছু করা বোঝায় , বলুন অন্য থ্রেড।
  • অ ব্লক প্রায়ই বোঝায় পোলিং , অর্থাত্ পরীক্ষণ কিনা প্রদত্ত শর্ত ঝুলিতে (সকেট পাঠযোগ্য, ডিভাইসের, আরো তথ্য আছে ইত্যাদি)

17
আই / ও জড়িত থাকাকালীন, অ্যাসিনক্রোনাস সাধারণত "সমান্তরাল" হয় না বা "অন্য থ্রেড" হয় না, বেশিরভাগ ক্ষেত্রে এটি বিজ্ঞপ্তি ভিত্তিক হয়। এটি হ'ল: অবরুদ্ধ করবেন না, পোল করবেন না, কেবল সংকেত পান। অবশ্যই, এটি যুক্তিযুক্ত হতে পারে যে সিগন্যালটি 'রিয়েল ওয়ার্ল্ড' থেকে আসছে যা 'অন্য থ্রেড' হিসাবে ভাবা যেতে পারে ...
জাভিয়ের

ঠিক আছে, হ্যাঁ, আমরা সারাদিনে সঠিক শব্দটির তর্ক করতে পারি :)
নিকোলাই ফেটিসসোভ

তবে আপনি কীভাবে এআইওকে লিনাক্সে ব্যাখ্যা করবেন? যা অ্যাসিঙ্ক এবং অ-ব্লকিং উভয়ই ব্যবহৃত হয়েছিল। এআইও লিঙ্কস
ডিজেভু

16
এই উত্তরটি যে কারও কাছে পড়ছেন: এটি সঠিক শব্দটির সাথে বিতর্ক করছে না। একইভাবে একইভাবে সমান্তরালতা এবং সমান্তরালতা একই ধারণা নয় এবং তাদের পার্থক্য কোনও শব্দের সমস্যা নয়। অ্যাসিনক্রোনসিটি এবং সমান্তরালতা দুটি পৃথক জন্তু এবং এই উত্তরটি সঠিকভাবে তাদের একই হতে পারে।
পটিভাল

2
অ্যাসিঙ্ক অগত্যা এটি সমান্তরালভাবে সম্পন্ন হওয়ার অর্থ নয়, সমবর্তী এবং সমান্তরাল প্রোগ্রামিং সম্পর্কে স্ট্যাকওভারফ্লোতে এই দুর্দান্ত পোস্টটি দেখুন ।
বার্জ

17

এই প্রশ্নটি জাভা 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) {...}
    }
}

3
FileChannelনির্বাচনযোগ্য নয় এবং নন-ব্লকিংয়ের জন্য কনফিগার করা যায় না।
মিচেল্লিউ

15

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

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

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

দুঃখিত, তবে আমি বিশ্বাস করি না যে বিশ্বব্যাপী সত্য একটি সঠিক উত্তর আছে।


1
+1 ভাল উত্তর। মানুষ সচেতন যে, "অ্যাসিঙ্ক্রোনাস" অর্থ করতে পারেন হতে হবে পারেন অ ব্লক, বা মাইক্রোসফট asynch (ইভেন্ট ভিত্তিক / কলব্যাক) পদ্ধতির।
ইঞ্জিনিয়ার

14

একটি নন-ব্লকিং কল যে কোনও ডেটা উপলভ্য সাথে সাথেই রিটার্ন দেয়: অনুরোধ করা বাইটের পুরো সংখ্যা, কম বা মোটেও নয়।

একটি অ্যাসিঙ্ক্রোনাস কল একটি স্থানান্তরের অনুরোধ করে যা এর সম্পূর্ণ (সম্পূর্ণতা) তে সঞ্চালিত হবে তবে ভবিষ্যতের কিছু সময় সম্পূর্ণ হবে।


অ-ব্লকিং কোনও ফলই কিছুতেই ফিরে আসে না
সিইও অ্যাপার্টমেন্টিকো

9

অবরুদ্ধকরণ: স্ট্যাকের সময় এই ফাংশনটি অপেক্ষা করবে না।

অ্যাসিনক্রোনাস: কলটি স্ট্যাকটি ছেড়ে যাওয়ার পরে ফাংশন কলের পক্ষে কাজ চালিয়ে যেতে পারে


1
@ মারেঞ্জ অর্থ আপনি সরাসরি পিক্সিক কল দিয়ে অ-ব্লকিং আইও করতে পারবেন না। এখানে তিনি যে অর্থ দেন তা পরিবর্তিত হয় না।
tmc

@ মারেঞ্জ যার অর্থ কেবলমাত্র ফাইলগুলির জন্য পতাকা উপেক্ষা করা হবে। এটি এই উত্তরের অর্থকে প্রভাবিত করে না।
লার্নের মারকুইস

8

সিঙ্ক্রোনাস একই সময়ে ঘটছে হিসাবে সংজ্ঞায়িত করা হয়।

অ্যাসিঙ্ক্রোনাস একই সময়ে ঘটছে না হিসাবে সংজ্ঞায়িত করা হয়।

এটিই প্রথম বিভ্রান্তির কারণ হয়। সমকালীন আসলে সমান্তরাল হিসাবে পরিচিত। অ্যাসিনক্রোনাস ক্রমযুক্ত হলেও, এটি করুন, তারপরে এটি করুন।

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

সহজ সমাধানটি ব্লকিং হিসাবে পরিচিত।

অবরুদ্ধকরণ হ'ল আপনি যখন অন্য কাজটি হয়ে যাবার জন্য কেবল অপেক্ষা করতে চান এবং যে অপারেশনটির প্রয়োজন হয় তার দিকে এগিয়ে যাওয়ার আগে আপনাকে প্রতিক্রিয়া ফিরিয়ে দেন।

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

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

অমন-ব্লকিং এবং অ্যাসিনক্রোনাস হিসাবে যথাক্রমে পরিচিত আরও দুটি সমাধান কার্যকর হয় That's

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

সুতরাং এটি পপ করার জন্য টাস্টারের দিকে তাকানোর পরিবর্তে। আপনি গিয়ে পুরো থালা ধুয়ে ফেলুন। এবং তারপরে টোস্টগুলি পপ হয়েছে কিনা তা দেখতে আপনি টোস্টের দিকে তাকাবেন। যদি তারা না থাকে তবে আপনি অন্য থালা ধুয়ে যান এবং প্রতিটি থালার মধ্যে টোস্টারে ফিরে যাচ্ছেন। যখন আপনি দেখবেন টোস্টগুলি পপ হয়েছে, আপনি থালাগুলি ধুয়ে ফেলবেন এবং তার পরিবর্তে আপনি টোস্টটি নিয়ে তার উপর মাখন লাগিয়ে যান।

টোস্টগুলিতে নিয়মিত চেক করা বিরক্তিকর হতে পারে, তবে কল্পনা করুন যে টোস্টারটি অন্য ঘরে রয়েছে। থালা বাসনগুলির মধ্যে আপনি টস্টটি পরীক্ষা করতে অন্য রুমে যাওয়ার সময় নষ্ট করেন।

এখানে এসিনক্রোনাস আসে।

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

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

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

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

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

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

সম্পাদনা:

যদিও এটি ইতিমধ্যে দীর্ঘ, আমি এটিও সম্পূর্ণ হওয়া চাই, সুতরাং আমি আরও দুটি পয়েন্ট যুক্ত করব।

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

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

2) যদিও আমি এটি একটি বড় ভুল বলে বিশ্বাস করি তবুও সিনক্রোনাস প্রায়শই একবারে একটি জিনিস বোঝাতে ব্যবহৃত হয়। এবং একসাথে অ্যাসিনক্রোনাস অনেক জিনিস। সুতরাং আপনি ব্লকিং এবং অ-ব্লকিংয়ের জন্য ব্যবহৃত সিঙ্ক্রোনাস ব্লকিং এবং অ-ব্লকিং দেখতে পাবেন। এবং অ্যাসিঙ্ক্রোনাস ব্লকিং এবং নন-ব্লকিং মাল্টিপ্লেক্সড এবং সানডে রেফারেন্স হিসাবে ব্যবহৃত হয়।

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


আপনি কেন "সিঙ্ক্রোনাস একই সময়ে ঘটছে হিসাবে সংজ্ঞায়িত হয়েছে" তা নিশ্চিত নন? পুরো ধারণাটি এটি একযোগে নয়, একই সময়ে ঘটছে না।
হেলসিং

এটি একটি দুর্দান্ত উপমা ছিল! আপনি শুধু এটি টোস্ট!
d-coder

@ হেলসিং এর অর্থ এই শব্দটির অর্থ lite সিঙ্ক্রোনাস অর্থ একই সময়, এবং অ্যাসিনক্রোনাস অর্থ একই সময় নয়: পি। কিছু অ্যাসিক্রোনাস হওয়ার কারণ, কারণ এটি একই সময়ে ঘটতে পারে না, এটি অবশ্যই আগে বা পরে ঘটতে হবে। যদি এটি একই সময়ে ঘটতে পারে তবে আপনি কেবল এটির সমান্তরাল করতে পারেন বা কোনও ক্রমে এটি করতে পারেন এবং আপনার সুস্পষ্ট সিঙ্ক্রোনাইজেশন প্রয়োজন হবে না। এ কারণেই অ্যাসিঙ্ক প্রোগ্রামিং এগুলি করা সম্পর্কে সমস্ত কিছু, তারপরে, এই জিনিসগুলির উপর অপেক্ষা করুন এবং তারপরে ইত্যাদি Because কারণ those জিনিসগুলির মধ্যে কোনওটিই একই সাথে ঘটতে পারে না।
দিদিয়ার এ।

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

3

ব্লকিং কল: কলটি সম্পূর্ণ হলেই নিয়ন্ত্রণ ফিরে আসে।

অবরুদ্ধ কল: নিয়ন্ত্রণ তত্ক্ষণাত্ ফিরে আসে। পরে ওএস কোনওভাবে কলটি সম্পূর্ণ হওয়ার প্রক্রিয়াটি অবহিত করে।


সিঙ্ক্রোনাস প্রোগ্রাম: একটি প্রোগ্রাম যা ব্লকিং কল ব্যবহার করে। কল চলাকালীন স্থির না হওয়ার জন্য এটিতে 2 বা ততোধিক থ্রেড থাকতে হবে (এজন্য এটিকে সিঙ্ক্রোনাস বলা হয় - থ্রেডগুলি সিঙ্ক্রোনিকভাবে চলছে)।

অ্যাসিঙ্ক্রোনাস প্রোগ্রাম: এমন একটি প্রোগ্রাম যা নন ব্লকিং কল ব্যবহার করে। এটিতে কেবল 1 টি থ্রেড থাকতে পারে এবং এখনও ইন্টারেক্টিভ থেকে যায়।


1
অবরুদ্ধকরণ কল: তাত্ক্ষণিকভাবে তাত্ক্ষণিকভাবে করা যায় যতটা করার পরে রিটার্ন নিয়ন্ত্রণ করুন; পদ্ধতিটি কতটা করা হয়েছিল তা নির্দেশ করে। এটি একটি অ্যাসিঙ্ক্রোনাস কল থেকে পৃথক, যা কল ব্লক করার জন্য বর্ণিত হিসাবে আচরণ করে।
সুপারক্যাট

0

তারা শুধুমাত্র বানানেই আলাদা হয়। তারা যা উল্লেখ করেছে তাতে কোনও পার্থক্য নেই। প্রযুক্তিগত হতে আপনি বলতে পারেন যে তারা জোরের মধ্যে পৃথক। অ-ব্লকিং নিয়ন্ত্রণ প্রবাহকে বোঝায় (এটি আটকে না


0

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


-2

ব্লকিং: প্রিমিটিভ (সিঙ্ক বা অ্যাসিঙ্ক) সম্পন্ন হওয়ার পরে প্রসেসিং ইনকোসিং প্রসেসে নিয়ন্ত্রণ ফিরে আসে

অবরুদ্ধকরণ: আমন্ত্রণের সাথে সাথে প্রক্রিয়াতে ফিরে আসা নিয়ন্ত্রণ করে


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