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