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