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