এর মধ্যে পার্থক্য কী: অ্যাসিনক্রোনাস, অ-ব্লকিং, ইভেন্ট-বেস আর্কিটেকচার?


86
  1. এর মধ্যে পার্থক্য কী:

    • অ্যাসিঙ্ক্রোনাস ,
    • অ-অবরুদ্ধ , এবং
    • ইভেন্ট-বেস আর্কিটেকচার?
  2. কিছু কি অ্যাসিনক্রোনাস এবং অ-ব্লকিং (এবং ইভেন্ট ভিত্তিক ) উভয় হতে পারে ?

  3. প্রোগ্রামিংয়ে সবচেয়ে গুরুত্বপূর্ণ কী, কিছু পাওয়ার জন্য: অ্যাসিনক্রোনাস, নন-ব্লকিং এবং / বা ইভেন্ট-বেস (বা সমস্ত 3)?

আপনি উদাহরণ প্রদান করতে পারে, এটি দুর্দান্ত।

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

উত্তর:


91

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

নন-ব্লকিং এই শব্দটি বেশিরভাগ ক্ষেত্রে আইওর সাথে ব্যবহৃত হয়। এর অর্থ হ'ল আপনি যখন কোনও সিস্টেম কল করেন তখন তা আপনার থ্রেডটি ঘুমিয়ে না রেখেই ফলস্বর সাথে ফিরে আসবে (উচ্চ সম্ভাবনা সহ)। উদাহরণস্বরূপ অ-ব্লক করা পঠন / লিখন কলগুলি যা কিছু করতে পারে তার সাথে ফিরে আসে এবং কলার আবার কলটি কার্যকর করার আশা করে। উদাহরণস্বরূপ ট্রাই_লক হ'ল নন-ব্লকিং কল। লকটি কেবল তখনই অধিগ্রহণ করা যেতে পারে। সিস্টেম কলগুলির জন্য সাধারণ শব্দার্থতন্ত্রগুলি অবরুদ্ধ। এটিতে কিছু ডেটা না হওয়া পর্যন্ত wait

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

আমি মনে করি এই পদগুলি ওভারল্যাপ হয়েছে। উদাহরণস্বরূপ HTTP প্রোটোকল সিঙ্ক্রোনাস তবে নন-ব্লকিং আইও ব্যবহার করে এইচটিটিপি বাস্তবায়ন অ্যাসিঙ্ক্রোনাস হতে পারে। আবার রিড / রাইটিং / ট্রাই_লোকের মতো একটি অ-ব্লকিং এপিআই কলটি সিঙ্ক্রোনাস (এটি অবিলম্বে একটি প্রতিক্রিয়া দেয়) তবে "ডেটা হ্যান্ডলিং" অবিচ্ছিন্ন।


4
ধ্রুবক পোলিংয়ের প্রয়োজন অ-অবরুদ্ধকরণ সম্পর্কে ভাল পয়েন্ট, যখন অ্যাসিঙ্কটি পুশ-ভিত্তিক হতে পারে।
আলেকজান্ডার টর্সলিং

আপনি তাত্ক্ষণিক প্রতিক্রিয়া প্রাপ্ত হিসাবে সিঙ্ক্রোনজকে সংজ্ঞায়িত করেছেন, কিন্তু যখন আমি গুগল সিঙ্ক্রোনাস করি তখন সমস্ত অভিধান অভিধানকে 'তাত্ক্ষণিক প্রতিক্রিয়া' হিসাবে নয়, একই সাথে ঘটছে বলে সংজ্ঞায়িত করে।
ইন্টেলিডিটা

4
আমি ইমেল পাঠালে কীভাবে অবরুদ্ধ হই তবে উত্তর প্রত্যাশা করি না? আমি প্রতিক্রিয়ার জন্য অপেক্ষা করার সময় আমার নিজের ব্যবসায়কে মনে রাখতে পারি।
Koray Tugay

20

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

একটি সিরিয়াল বন্দর বিবেচনা করুন, যা থেকে কোডটি 1000 বাইট পেতে চাইবে।

একটি ব্লকিং-পঠিত আর্কিটেকচারে, কোডটি 1000 বাইটের আগত না হওয়া বা এটি ছেড়ে দেওয়ার সিদ্ধান্ত নেওয়ার আগ পর্যন্ত অপেক্ষা করবে।

একটি অ্যাসিঙ্ক্রোনাস-পঠিত আর্কিটেকচারে কোডটি ড্রাইভারকে বলবে যে এটি 1000 বাইট চায়, এবং 1000 বাইট উপস্থিত হলে তা অবহিত হবে।

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

ইভেন্ট-ভিত্তিক আর্কিটেকচারে, সিরিয়াল পোর্ট ড্রাইভার যেকোন ডেটা আসার সাথে সাথে অ্যাপ্লিকেশনটি অবহিত করবে। ড্রাইভার জানতে পারবে না অ্যাপ্লিকেশনটি কতগুলি বাইট চায়, তাই অ্যাপ্লিকেশনটি অ্যাপ্লিকেশন যা চায় তার চেয়ে ছোট বা বৃহত্তর পরিমাণের জন্য বিজ্ঞপ্তিগুলি মোকাবেলা করতে সক্ষম হবে।


5

সুতরাং আপনার প্রথম এবং দ্বিতীয় প্রশ্নের উত্তর দিতে:

অ-ব্লকিং কার্যকরভাবে অ্যাসিঙ্ক্রোনাসের সমান - আপনি কল করেন এবং পরে ফল পাবেন তবে ঘটতে থাকা অবস্থায় আপনি অন্য কিছু করতে পারেন। ব্লক করা বিপরীত। যাত্রা চালিয়ে যাওয়ার আগে আপনি কলটি ফিরে আসার অপেক্ষায় রয়েছেন।

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

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

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

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

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

আমি আপনাকে বলব কেন অ্যাসিঙ্ক / নন-ব্লকিং কোড ব্যাক-এন্ড সিস্টেমগুলির সাথে একটি দুঃস্বপ্ন ....

1) এটি উত্পাদনশীলতার উপর পরিষেবার অস্বীকার হয়ে যায় ... আপনাকে আরও অনেক কিছু ভাবতে হবে, এবং আপনি পথে অনেকগুলি ভুল করছেন make

২) প্রতিক্রিয়াশীল কোডে স্ট্যাকের চিহ্নগুলি অনিবার্য হয়ে ওঠে - কী কী, কখন, কেন এবং কীভাবে কী নামে পরিচিত তা জানা শক্ত। ডিবাগিংয়ের জন্য শুভকামনা।

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

4) এটি পরীক্ষা করা কঠিন।

5) এটি বজায় রাখা কঠিন।

6) এটি বেদনাদায়ক। প্রোগ্রামিং একটি আনন্দ এবং মজা হওয়া উচিত। কেবল মাসোশিস্টরা ব্যথা পছন্দ করেন। সমকালীন / প্রতিক্রিয়াশীল ফ্রেমওয়ার্কগুলি লেখেন এমন লোকেরা স্যাডিস্ট।

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

  1. হ্যাঁ, কোড অ্যাসিনক্রোনাস, অ-ব্লকিং এবং ইভেন্ট ভিত্তিক হতে পারে।

  2. প্রোগ্রামিংয়ের সর্বাধিক গুরুত্বপূর্ণ বিষয় হ'ল আপনার কোডটি কার্যকর সময় এবং গ্রহণযোগ্য পরিমাণে প্রতিক্রিয়া জানিয়েছে তা নিশ্চিত করা। এই মূল নীতিটির প্রতি দৃ .় থাকুন এবং আপনি ভুল হতে পারবেন না।


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

4

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

অ্যাসিনক্রোনাস অর্থ হ'ল আহরণটি কলারের প্রবাহের বাইরে ঘটে এবং সম্ভাব্যভাবে হতাশ হয়। মৃত্যুদন্ড কার্যকরভাবে অন্য থ্রেডে ঘটে।

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

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

তিনটি পদ সম্পর্কিত তবে আমার কাছে ভিন্ন ধারণা। এটি এমনও হতে পারে যে লোকেরা তাদের কিছুটা বিনিময়যোগ্য উপায়ে ব্যবহার করে।


2

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

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

সাধারণত, অ্যাসিনক্রোনাস আর্কিটেকচারটি ইভেন্ট-ভিত্তিক, অ-ব্লকিং আর্কিটেকচার।

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

ঘটনাগুলি একই থ্রেডে পরিচালনা করা হবে কি হবে না তা বোঝা গুরুত্বপূর্ণ, কারণ এটি কার্যকরকরণের অ-ব্লকিং প্রকৃতিকে প্রভাবিত করবে, তবে আমি কোনও লাইব্রেরি সম্পর্কে ব্যক্তিগতভাবে সচেতন নই যা একক থ্রেডে অ্যাসিঙ্ক্রোনাস এক্সিকিউশন ম্যানেজমেন্ট করে।

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



আমার ধারণা আমি আপনার প্রশ্নের "সংজ্ঞা" অংশটি সম্বোধন করার খুব ভাল কাজ করিনি; আমি একটি আপডেট পোস্ট করব। তবে না, একক থ্রেডযুক্ত মৃত্যুদন্ড কার্যকর করার প্রকৃতিটি হ'ল প্রতিটি ক্রিয়াকলাপটি চলমান অবস্থায় সহজাতভাবে অবরুদ্ধ হয় যা অ্যাসিঙ্ক্রোনিকে আরও কার্যকর করে তোলে।
ম্যাট মিলস
আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.