সুতরাং আপনার প্রথম এবং দ্বিতীয় প্রশ্নের উত্তর দিতে:
অ-ব্লকিং কার্যকরভাবে অ্যাসিঙ্ক্রোনাসের সমান - আপনি কল করেন এবং পরে ফল পাবেন তবে ঘটতে থাকা অবস্থায় আপনি অন্য কিছু করতে পারেন। ব্লক করা বিপরীত। যাত্রা চালিয়ে যাওয়ার আগে আপনি কলটি ফিরে আসার অপেক্ষায় রয়েছেন।
এখন অ্যাসিঙ্ক / নন-ব্লকিং কোড একেবারে দুর্দান্ত শোনায় এবং এটি হয়। তবে আমার কাছে সতর্কতার শব্দ রয়েছে। মোবাইল ফোনে যেমন সীমাবদ্ধ পরিবেশে কাজ করা হয় তখন অ্যাসিঙ্ক / নন-ব্লকিং দুর্দান্ত হয় ... সীমিত সিপিইউ / মেমরি বিবেচনা করুন। এটি ফ্রন্ট-এন্ড বিকাশের জন্যও ভাল, যেখানে আপনার কোডটি কোনও উপায়ে কোনও ইউআই উইজেটের প্রতিক্রিয়া দেখাতে পারে।
সমস্ত অপারেটিং সিস্টেমের কীভাবে কাজ করা দরকার তার জন্য অ্যাসিঙ্ক মৌলিক - তারা আপনার জন্য যা চাওয়া হয়েছিল তা করেছে এবং আপনার কলটি জাগিয়ে তোলে এবং আপনার কলটি ব্যর্থ হয়ে যায়, তখন আপনাকে বলা হয় যে এটি করা হয়নি কোনও ব্যতিক্রম, বা কোনওরকম রিটার্ন কোড / ত্রুটিযুক্ত বস্তু দ্বারা কাজ করুন।
যখন আপনার কোডটি এমন কোনও কিছু জিজ্ঞাসা করবে যা প্রতিক্রিয়া জানাতে কিছুটা সময় নেবে, তখন আপনার ওএস জানে যে এটি অন্যান্য জিনিসগুলি নিয়ে ব্যস্ত হতে পারে। আপনার কোড - একটি প্রক্রিয়া, থ্রেড বা সমতুল্য, ব্লক। ওএসে আর কী চলছে তা আপনার কোডটি পুরোপুরি অবজ্ঞাত নয় যখন এটি নেটওয়ার্ক সংযোগটি তৈরি হওয়ার জন্য অপেক্ষা করে, বা যখন এটি কোনও এইচটিটিপি অনুরোধ থেকে সেই প্রতিক্রিয়ার জন্য অপেক্ষা করে, বা যখন এটি কোনও ফাইল পড়ার / লেখার জন্য অপেক্ষা করে এবং শীঘ্রই. আপনার কোডটি "সহজভাবে" মাউস ক্লিকের জন্য অপেক্ষা করতে পারে। সেই সময়ে আসলে যা চলছে তা আপনার ওএস নির্বিঘ্নে "ইভেন্টগুলি" পরিচালনা, সময়সূচী এবং প্রতিক্রিয়া দেখাচ্ছিল - ওএস যে জিনিসগুলি সন্ধান করছে মেমরি পরিচালনা করার জন্য, আই / ও (কীবোর্ড, মাউস, ডিস্ক, ইন্টারনেট), অন্যান্য কাজ, ব্যর্থতা পুনরুদ্ধার, ইত্যাদি
অপারেটিং সিস্টেমগুলি ফ্রিকিনের হার্ড-কোর। প্রোগ্রামার আপনার কাছ থেকে জটিল সমস্ত async / নন-ব্লকিং স্টাফগুলি গোপনে তারা সত্যই ভাল। এবং বেশিরভাগ প্রোগ্রামাররা আজ আমরা সফ্টওয়্যার নিয়ে যেখানে এসেছি। এখন আমরা সিপিইউ সীমাবদ্ধতা দিচ্ছি, লোকেরা বলছে পারফরম্যান্সের উন্নতির জন্য সমান্তরালে জিনিসগুলি করা যায়। এর অর্থ অ্যাসিঙ্ক / অ-ব্লক করা একটি খুব অনুকূল কাজ হিসাবে মনে হচ্ছে এবং হ্যাঁ, আপনার সফ্টওয়্যার যদি এটি দাবি করে তবে আমি সম্মত হতে পারি।
যদি আপনি একটি ব্যাক-এন্ড ওয়েব সার্ভার লিখছেন তবে সাবধানতার সাথে এগিয়ে যান। মনে রাখবেন আপনি অনেক সস্তার জন্য অনুভূমিকভাবে স্কেল করতে পারেন। নেটফ্লিক্স / অ্যামাজন / গুগল / ফেসবুক যদিও এই নিয়মের স্পষ্ট ব্যতিক্রম, খাঁটি কারণ এটি তাদের জন্য কম হার্ডওয়্যার ব্যবহারের জন্য সস্তা ব্যয় করে।
আমি আপনাকে বলব কেন অ্যাসিঙ্ক / নন-ব্লকিং কোড ব্যাক-এন্ড সিস্টেমগুলির সাথে একটি দুঃস্বপ্ন ....
1) এটি উত্পাদনশীলতার উপর পরিষেবার অস্বীকার হয়ে যায় ... আপনাকে আরও অনেক কিছু ভাবতে হবে, এবং আপনি পথে অনেকগুলি ভুল করছেন make
২) প্রতিক্রিয়াশীল কোডে স্ট্যাকের চিহ্নগুলি অনিবার্য হয়ে ওঠে - কী কী, কখন, কেন এবং কীভাবে কী নামে পরিচিত তা জানা শক্ত। ডিবাগিংয়ের জন্য শুভকামনা।
3) আপনার কীভাবে জিনিসগুলি ব্যর্থ হয় সে সম্পর্কে আপনাকে আরও চিন্তা করতে হবে, বিশেষত যখন আপনি কীভাবে প্রেরণ করেছেন সেগুলি থেকে অনেক জিনিস ফিরে আসে। পুরানো বিশ্বে আপনি একবারে একটি কাজ করেছিলেন।
4) এটি পরীক্ষা করা কঠিন।
5) এটি বজায় রাখা কঠিন।
6) এটি বেদনাদায়ক। প্রোগ্রামিং একটি আনন্দ এবং মজা হওয়া উচিত। কেবল মাসোশিস্টরা ব্যথা পছন্দ করেন। সমকালীন / প্রতিক্রিয়াশীল ফ্রেমওয়ার্কগুলি লেখেন এমন লোকেরা স্যাডিস্ট।
এবং হ্যাঁ, আমি উভয় সিঙ্ক এবং অ্যাসিঙ্ক লিখেছি। আমি সমকালীন হিসাবে পছন্দ করি কারণ 99.99 ব্যাক-এন্ড অ্যাপ্লিকেশনগুলি এই দৃষ্টান্তটি দিয়ে পেতে পারে। ফ্রন্ট-এ্যান্ড অ্যাপ্লিকেশনগুলিকে প্রশ্নবিদ্ধবিহীন প্রতিক্রিয়াশীল কোড দরকার এবং এটি সর্বদা উপায় ছিল।
হ্যাঁ, কোড অ্যাসিনক্রোনাস, অ-ব্লকিং এবং ইভেন্ট ভিত্তিক হতে পারে।
প্রোগ্রামিংয়ের সর্বাধিক গুরুত্বপূর্ণ বিষয় হ'ল আপনার কোডটি কার্যকর সময় এবং গ্রহণযোগ্য পরিমাণে প্রতিক্রিয়া জানিয়েছে তা নিশ্চিত করা। এই মূল নীতিটির প্রতি দৃ .় থাকুন এবং আপনি ভুল হতে পারবেন না।