সমবর্তী প্রোগ্রামিংয়ের দিকে তাকালে, দুটি শব্দ সাধারণত ব্যবহৃত হয় অর্থাৎ সমবর্তী এবং সমান্তরাল।
এবং কিছু প্রোগ্রামিং ভাষা বিশেষত জাভা সমান্তরাল প্রোগ্রামিংয়ের জন্য সমর্থন দাবি করে ।
এর অর্থ কি সমান্তরাল এবং সমবর্তী প্রোগ্রামিং আসলে আলাদা?
সমবর্তী প্রোগ্রামিংয়ের দিকে তাকালে, দুটি শব্দ সাধারণত ব্যবহৃত হয় অর্থাৎ সমবর্তী এবং সমান্তরাল।
এবং কিছু প্রোগ্রামিং ভাষা বিশেষত জাভা সমান্তরাল প্রোগ্রামিংয়ের জন্য সমর্থন দাবি করে ।
এর অর্থ কি সমান্তরাল এবং সমবর্তী প্রোগ্রামিং আসলে আলাদা?
উত্তর:
সমান্তরালতা (ভাগ করে নেওয়া সংস্থাগুলিতে অ্যাক্সেস পরিচালনার) থেকে সমান্তরালতা (ইউনিট সময়কালে আরও বেশি কাজ করার জন্য অতিরিক্ত গণনামূলক ইউনিট ব্যবহার করে) আলাদা করুন। সমান্তরালতা প্রথম শিখান কারণ এটি সহজ এবং একটি অ-অনুক্রমিক মানসিকতা প্রতিষ্ঠায় সহায়তা করে।
ড্যান গ্রসম্যান ("নভেম্বর 16, 2013 এর সংস্করণ) দ্বারা" এ সোফমোরিক red পরিচিতি-স্মৃতি সমান্তরালতা এবং সমঝোতার পরিচয় "থেকে
নিশের উত্তর ছাড়াও, আসুন আমি হাস্কেলের প্যারালাল অ্যান্ড কনকোয়ারেন্ট প্রোগ্রামিং সম্পর্কিত সায়মন মার্লোর বই বা তার সংক্ষিপ্ত টিউটোরিয়ালটি সুপারিশ করি । তারা হাস্কেলের দৃষ্টিকোণ থেকে আপনার প্রথম প্রশ্নের উত্তর দেয়, তাই তারা তাত্ত্বিকভাবে ঝুঁকির পাঠকদের পক্ষে আরও উপযুক্ত হতে পারে (হাস্কেল একটি খাঁটি কার্যকরী, অলস প্রোগ্রামিং ভাষা যা অন্যান্য ভাষার তুলনায় গণিতের খুব কাছাকাছি)।
সেখান থেকে উদ্ধৃতি:
অনেক ক্ষেত্রে সমান্তরাল এবং সমবর্তী শব্দগুলি সমার্থক শব্দ; প্রোগ্রামিংয়ে তেমন নয়, যেখানে সেগুলি মূলত বিভিন্ন ধারণাটি বর্ণনা করতে ব্যবহৃত হয়।
একটি সমান্তরাল প্রোগ্রাম হ'ল গণনাটি আরও দ্রুত সঞ্চালনের জন্য গণ্য হার্ডওয়্যার (যেমন একাধিক প্রসেসরের কোর) এর একটি গুণকে ব্যবহার করে। গণনার বিভিন্ন অংশ বিভিন্ন প্রসেসরের কাছে অর্পণ করা হয় যা একই সময়ে সঞ্চালিত হয় (সমান্তরালভাবে), যাতে ফলশ্রুতি আগে সরবরাহ করা যেতে পারে যদি গণনাটি ধারাবাহিকভাবে সম্পাদন করা হত।
বিপরীতে, সম্মতি একটি প্রোগ্রাম-কাঠামো কৌশল যাতে একাধিক নিয়ন্ত্রণের থ্রেড রয়েছে। কল্পিতভাবে নিয়ন্ত্রণের থ্রেডগুলি "একই সাথে" কার্যকর করা হয়; এটি হ'ল ব্যবহারকারী তাদের ইন্টারলিভড ইফেক্টগুলি দেখেন। তারা প্রকৃতপক্ষে একই সময়ে মৃত্যুদণ্ড কার্যকর করবে কিনা তা বাস্তবায়নের বিশদ; একটি সমকালীন প্রোগ্রাম আন্তঃবাহিত এক্সিকিউশনের মাধ্যমে একক প্রসেসরে বা একাধিক শারীরিক প্রসেসরের মাধ্যমে সম্পাদন করতে পারে।
আমি টিউটোরিয়ালটিতে বাকীটি পড়ার পরামর্শ দিচ্ছি (পি .৪) তবে এই বিভাগের বাকী কিছু অংশ উদ্ধৃত করলাম, কারণ এটি প্রোগ্রামিংয়ের দৃষ্টান্তগুলিকে প্রোগ্রামের পরিমাণগত এবং গুণগত বৈশিষ্ট্যগুলির সাথে সংযুক্ত করে, যেমন দক্ষতা, পরিমিতি এবং নির্ধারণবাদ ism
সমান্তরাল প্রোগ্রামিং কেবল দক্ষতার সাথে সম্পর্কিত, সমবর্তী প্রোগ্রামিং এমন একটি প্রোগ্রাম গঠনের সাথে সম্পর্কিত যা একাধিক স্বতন্ত্র বহিরাগত এজেন্টগুলির সাথে যোগাযোগের প্রয়োজন (উদাহরণস্বরূপ ব্যবহারকারী, একটি ডাটাবেস সার্ভার এবং কিছু বাহ্যিক ক্লায়েন্ট)। সংমেয় যেমন প্রোগ্রামগুলিকে মডুলার হতে দেয়; যে থ্রেডটি ব্যবহারকারীর সাথে ইন্টারেক্ট করে তা থ্রেড থেকে পৃথক যা ডাটাবেসে কথা বলে talks সম্মতিহীনতার অভাবে, এই জাতীয় প্রোগ্রামগুলি ইভেন্ট লুপ এবং কলব্যাক সহ লিখতে হয় --- প্রকৃতপক্ষে, ইভেন্ট লুপ এবং কলব্যাকগুলি প্রায়শই উপলব্ধ থাকা সত্ত্বেও ব্যবহার করা হয়, কারণ অনেক ভাষায় সংমিশ্রণ হয় খুব ব্যয়বহুল, বা খুব কঠিন, ব্যবহার করুন।
"থ্রেড অফ কন্ট্রোল" ধারণাটি কোনও নিখুঁত কার্যকরী প্রোগ্রামে বোঝা যায় না, কারণ পর্যবেক্ষণ করার জন্য কোনও প্রভাব নেই, এবং মূল্যায়ন আদেশ অপ্রাসঙ্গিক। সুতরাং একচেটিয়া কার্যকর কোডের জন্য একটি কাঠামোগত কৌশল; হাসকেলে, এর অর্থ আইও মোনাডে কোড।
সম্পর্কিত পার্থক্য হ'ল ডিটারমিনিস্টিক এবং ননডিটারনিস্টিক প্রোগ্রামিং মডেলগুলির মধ্যে। একটি ডিস্ট্রিমেন্টিক প্রোগ্রামিং মডেল এমন একটি যাতে প্রতিটি প্রোগ্রাম কেবল একটি ফলাফল দিতে পারে, অন্যদিকে একটি ননডেটারেস্টেমিক প্রোগ্রামিং মডেল এমন প্রোগ্রামগুলিকে স্বীকৃতি দেয় যা মৃত্যুদণ্ডের কিছু দিকের উপর নির্ভর করে বিভিন্ন ফলাফল থাকতে পারে। সাম্প্রতিক প্রোগ্রামিং মডেলগুলি অগত্যা নিরক্ষুবাদী, কারণ তাদের অবশ্যই বাহ্যিক এজেন্টগুলির সাথে যোগাযোগ করা উচিত যা অপ্রত্যাশিত সময়ে ইভেন্ট সৃষ্টি করে। ননডিটারমিনিজমে কিছু উল্লেখযোগ্য ত্রুটি রয়েছে, তবে: প্রোগ্রামগুলি পরীক্ষা করা এবং এর পক্ষে যুক্তিযুক্ত হয়ে ওঠার পক্ষে আরও শক্ত।
সমান্তরাল প্রোগ্রামিংয়ের জন্য আমরা যদি সম্ভব হয় তবে ডিটারমিনিস্টিক প্রোগ্রামিং মডেলগুলি ব্যবহার করতে চাই। যেহেতু লক্ষ্যটি কেবলমাত্র আরও দ্রুত উত্তর পৌঁছে দেওয়া, তাই আমরা প্রক্রিয়াটি ডিবাগ করার জন্য আমাদের প্রোগ্রামটিকে আরও শক্ত করে তুলি না। নির্ধারিত সমান্তরাল প্রোগ্রামিং উভয় বিশ্বের সেরা: অনুক্রমিক প্রোগ্রামে পরীক্ষা, ডিবাগিং এবং যুক্তি সম্পাদন করা যেতে পারে, তবে প্রসেসর যুক্ত করা হলে প্রোগ্রামটি দ্রুত চলে। প্রকৃতপক্ষে, বেশিরভাগ কম্পিউটার প্রসেসরগুলি পাইপলাইনিং এবং একাধিক এক্সিকিউশন ইউনিট আকারে ডিটারমিনিস্টিক সমান্তরালতা প্রয়োগ করে।
সমানতন্ত্র ব্যবহার করে সমান্তরাল প্রোগ্রামিং করা সম্ভব হলেও এটি প্রায়শই একটি নিখুঁত পছন্দ, কারণ একচ্ছত্র তাত্পর্য নির্ধারণ। হাস্কেলের মধ্যে, সমান্তরাল প্রোগ্রামিং মডেলগুলি হতাশাবোধক। তবে, এটি লক্ষণীয় গুরুত্বপূর্ণ যে ডিটারমিনিস্টিক প্রোগ্রামিং মডেলগুলি সব ধরণের সমান্তরাল অ্যালগরিদমগুলি প্রকাশ করার জন্য পর্যাপ্ত নয়; অ্যালগরিদমগুলি যা অভ্যন্তরীণ অ-সংজ্ঞা নির্ধারণের উপর নির্ভর করে, বিশেষত এমন সমস্যাগুলির মধ্যে যা কোনও সমাধানের স্থান অনুসন্ধান করতে জড়িত। হাস্কেল-এ, এই শ্রেণীর অ্যালগরিদমগুলি কেবল সম্মতি ব্যবহার করে তা প্রকাশযোগ্য।
একত্রিত হওয়া এবং সমান্তরালতা তাদের সমাধান করা এবং সৃষ্ট সমস্যার মধ্যে পার্থক্য থাকলেও তারা স্বতন্ত্র নয়।
একই সাথে দুটি কার্য সম্পাদন করার অর্থ উভয় কার্যের স্বতন্ত্র পদক্ষেপগুলি একটি আন্তঃবাহিত ফ্যাশনে সম্পাদিত হয়। আপনি যদি সমান্তরালতা অবহেলা করেন তবে আপনি ধরে নিতে পারেন যে কোনও সময় যে কোনও সময়ে কেবলমাত্র একটি বিবৃতি কার্যকর করা হয়, তবে কোন কাজটি পরবর্তী পদক্ষেপটি কার্যকর করবে তার কোনও গ্যারান্টি আপনার নেই (একটি অগ্রাধিকার)।
এটি কিছু বিষয়ে কার্যকর:
প্রধান চ্যালেঞ্জগুলির মধ্যে কয়েকটি হ'ল:
সমান্তরালভাবে দুটি কার্য সম্পাদন করার অর্থ একই সাথে বিবৃতি কার্যকর করা হয় । এটি মূলত:
মূল চ্যালেঞ্জগুলির মধ্যে রয়েছে:
সমান্তরাল এবং বিতরণ করা কম্পিউটিংয়ের পার্থক্য করার জন্য এই প্রশ্নটি দেখুন ।
একটি সামান্য আদর্শিক উত্তর, সম্ভবত ...
কনক্যুরન્સી একটি প্রোগ্রাম কীভাবে লেখা হয় তার একটি সম্পত্তি । কোনও প্রোগ্রাম যদি কাঁটাচামচ / যোগস, লকস, লেনদেন, পারমাণবিক তুলনা-এবং-স্বাপ ক্রিয়াকলাপ ইত্যাদির মতো ব্যবহার করে রচিত হয়, তবে তা একযোগে হয়।
সমান্তরালতা হ'ল একটি প্রোগ্রাম কীভাবে প্রোগ্রাম চালায় । যদি কোনও প্রোগ্রাম একসাথে একাধিক কম্পিউটেশনাল ইউনিটে সঞ্চালিত হয়, তবে এটি সমান্তরালে কার্যকর করা হয়।
এ সম্পর্কে উত্তর প্রচুর পরিমাণে রয়েছে, তবে এটি বিভ্রান্তিকর হতে পারে। আমি এটি এইভাবে ভাবতে চাই এবং সম্ভবত এটি সহায়তা করে ?:
সমকালীন প্রোগ্রামিং এমন কোড যা কার্যকর করার আদেশের বিষয়ে চিন্তা করে না। জাভা সাম্প্রতিক প্রোগ্রামিংয়ের জন্য একটি দুর্বল ভাষা, তবে সহায়তার জন্য লাইব্রেরি এবং ফ্রেমওয়ার্ক রয়েছে। জাভাস্ক্রিপ্ট সমবর্তী প্রোগ্রামিংয়ের জন্য একটি দুর্দান্ত ভাষা এবং আপনি যখনসমকালীন নয় এমন কিছু লিখতে চান তখন তা প্রায়শই কঠিন(যেমন, আপনি যদি মৃত্যুদন্ড কার্যকর করার আদেশটি জোর করতে চান)। সাম্প্রতিক প্রোগ্রামিং ইভেন্ট-চালিত প্রোগ্রামিংয়ের জন্য দুর্দান্ত (যেখানে সম্পাদনের ক্রম ইভেন্ট শ্রোতার দ্বারা নির্ধারিত হয়, যেমন আপনার ব্রাউজারে কোড চলছে যা আপনি যখন একটি বোতামে ক্লিক করেন বা একটি বাক্সে টাইপ করেন তখন কাজ করে)।
একটি উদাহরণের মধ্যে একশটি এইচটিটিপি অনুরোধ তৈরি করা অন্তর্ভুক্ত থাকবে। নোডজেএস-তে, সহজ সমাধানটি হ'ল কলব্যাক পদ্ধতিতে একবারে সমস্ত 100 টি অনুরোধ খোলার জন্য এবং প্রতিক্রিয়াগুলি ফিরে এলে প্রতিবার একটি পদ্ধতি কার্যকর করা হয়। এটি সমবর্তী প্রোগ্রামিং। রুবিতে, সবচেয়ে সহজ (সর্বাধিক সাধারণ) সমাধান হ'ল একটি অনুরোধ খোলা এবং প্রতিক্রিয়াটি পরিচালনা করা, পরবর্তী অনুরোধটি খুলুন এবং প্রতিক্রিয়া হ্যান্ডেল করা requests সার্ভার হাতুড়ি বা আপনার আউটবাউন্ড সংযোগগুলি সর্বাধিক বৃদ্ধি এড়াতে সতর্কতা অবলম্বন করুন (ভুল করে করা সহজ)। আপনি রুবিকে একযোগে লিখতে পারেন, তবে বেশিরভাগ রুবি কোডটি কীভাবে লেখা হয় তা নয় এবং এটি করতে একটু ব্যথা হয়।
সমান্তরাল প্রোগ্রামিংএমন কোড যা একাধিক থ্রেড বা প্রক্রিয়াগুলিতে একসাথে চালানো যেতে পারে। এটি আপনাকে একাধিক সিপিইউ জুড়ে কোড চালিয়ে পারফরম্যান্স অনুকূল করতে দেয় (প্রায়শই একাধিক মেশিন সহ, যেমন আপনি আক্কার মতো কিছু দিয়ে থাকতে পারেন)। নোডজেএস মাল্টি-থ্রেডেড নয় এবং সমান্তরাল সম্পাদন নেই বলে আপনাকে থ্রেডসেফ কোড লেখার বিষয়ে চিন্তা করতে হবে না (এবং বেশিরভাগ জাভাস্ক্রিপ্ট কোড আমি দেখেছি থ্রেডসেফ নয়)। জাভাতে, যদিও ভাষা যুগপত প্রোগ্রামিংগুলিকে সাধারণ প্যাটার্ন তৈরি করে না, সমান্তরাল প্রোগ্রামিংটি অনেকটা অন্তর্নির্মিত এবং আপনাকে প্রায়শই থ্রেড-সুরক্ষা সম্পর্কে চিন্তা করতে হবে। আপনি যদি জাভাতে কোনও ওয়েবসাইট লিখছেন, সাধারণত এটি একটি ধারকটিতে চালিত হবে যা প্রতিটি অনুরোধকে একই মেমরিতে পৃথক থ্রেডে চালায়,
উপরের কিছুগুলি আপনি যে ক্ষেত্র এবং সীমানা সম্পর্কে কথা বলছেন তার উপর নির্ভর করে। আমি ওয়েবসাইটগুলিতে কাজ করি। আমি দেখতে বেশিরভাগ জাভা কোডটি সমবর্তী প্রোগ্রামিং নয়। অবশ্যই, আপনি যদি যথেষ্ট জুম করেন তবে গ্রাহকের অনুরোধটি যে আদেশে আসে তা গুরুত্বপূর্ণ নয়, তবে আপনি যদি এর চেয়ে আরও কিছুটা জুম করেন তবে জিনিসগুলি কার্যকর করার আদেশটি কোড দ্বারা নির্ধারিত হয়। কোডটি এমনভাবে লিখিত হয়েছে যাতে অনুরোধগুলি প্রচুর ভাগ করা বস্তুর সাথে সমান্তরালভাবে সম্পাদন করতে পারে যা অবশ্যই থ্রেড-নিরাপদ থাকতে হবে।
এদিকে, বেশিরভাগ জাভাস্ক্রিপ্ট কোডটি আমি দেখতে পাই তা একই সাথে: এটি কার্যকরভাবে কার্যকর করা হয় যাতে বহু স্তরের ক্ষেত্রে ক্রম গুরুত্বহীন। তবে ভাগ করা মেমরিতে সমান্তরাল সম্পাদন সমর্থন করার জন্য এটি লেখা হয় না। অবশ্যই, আপনি একাধিক প্রক্রিয়া জুড়ে সমান্তরালভাবে একই কোডটি কার্যকর করতে পারেন, তবে অবজেক্টগুলি ভাগ করা হয় না, সুতরাং এটি কোনও অর্থবোধক অর্থে সমান্তরাল প্রোগ্রামিং নয়।
অতিরিক্ত পড়ার জন্য, আমি এখানে এই প্রশ্নের উপরের উত্তরের চিত্রগুলি সত্যই পছন্দ করি: https://www.quora.com/What-are-the-differences-between-parallel-concurrent-and-asynchronous-programming