Go Back to All Articles Concurrency vs. Parallelism

What Is Concurrency?

Dictionary অনুযায়ী concurrency হচ্ছে simultaneous occurrence. পাইথনে এই simultaneous occurrence এর বিভিন্ন নাম আছে (thread, task, process), তবে আপাত দৃষ্টিতে চিন্তা করলে বলা যায় যে এরা এক প্রকার instructions গুলোর sequence, যেগুলো কিছু নির্দিষ্ট নিয়মে চলতে থাকে কিন্তু আমি এদের কয়েকটি Train of thoughts হিসেবে বিবেচনা করতে পছন্দ করি. যার প্রত্যেকটা কে নির্দিষ্ট পয়েন্ট এ থামানো যায় এবং cpu বা brain, যারা সেগুলো process করছে তারা চাইলে অন্য একটিতেও switch করতে পারে। এখন আপনার মাথায় নিশ্চয়ই এই প্রশ্নটাই ঘুরছে যে কেন পাইথনে একই concept এর ভিন্ন term ব্যবহার হয়? আসল ব্যাপার হচ্ছে thread task এবং process আপাত দৃষ্টিতে দেখতে একই মনে হয়. কিন্তু আসলে এরা ভিন্ন. এটা বুঝতে হলে, মনোযোগ দিতে হবে এখন শুধুমাত্র multiprocessing আক্ষরিক অর্থে একই সময়ে Train of Thoughts চালায়। Threading, asyncio দুটোই একটি single processor এ চলে এবং এজন্যে শুধুমাত্র একটি process e সম্পন্ন করে. Threading এবং asyncio দুটোই সম্পূর্ণ process কে গতিশীল রাখার জন্যে পথ খুঁজে বের করে এগুলো simultaneous না হওয়া সত্ত্বেও আমরা তাকে coccurrency বলি Thread বা task যেভাবে process সম্পন্ন করার জন্য কাজ করে সেটাই এদের একে অপরের থেকে ভিন্ন করে তোলে. Threading এ operating system প্রকৃতপক্ষে একটি thread সম্পর্কে জানে এবং একটি thread চালানো শুরু করে যেকোনো সময় বন্ধ ও করতে পারে. একে pre-emptive multi-tasking বলে। যেহেতু operating system thread কে pre-empt করে switch করতে পারে Pre-emptive multi-tasking সুবিধাজনক, যে থ্রেডের কোডটি সুইচ করার জন্য কিছু করার দরকার নেই। এই সুইচটি একটি পাইথন স্টেটমেন্টের মাঝখানে (at any time) ঘটতে পারে, এমনকি x = x + 1 এর মতো একটি তুচ্ছ। অন্যদিকে asyncio, cooperative multitasking ব্যবহার করে। কাজগুলি যখন স্যুইচ আউট করার জন্য প্রস্তুত তখন ঘোষণা করে সহযোগিতা করতে হবে। এর মানে হল যে এটি ঘটতে টাস্কের কোডটি সামান্য পরিবর্তন করতে হবে। সামনে এই অতিরিক্ত কাজ করার সুবিধা হল যে আপনি সর্বদা জানেন যে আপনার কাজটি কোথায় অদলবদল করা হবে। এটি একটি পাইথন স্টেটমেন্টের মাঝখানে অদলবদল করা হবে না যদি না সেই statement চিহ্নিত করা হয়। আপনি পরে দেখতে পাবেন কীভাবে এটি আপনার ডিজাইনের অংশগুলিকে easy করতে পারে।

What Is Parallelism?

এখনও অবধি, আপনি single processor এ ঘটে যাওয়া concurrency দেখেছেন। আপনার cool, নতুন ল্যাপটপের সমস্ত cpu core এর কাজ তাহলে কি ? আপনি কিভাবে ব্যবহার করতে পারেন? Multiprocessing তাঁর উত্তর। Multiprocessing মাধ্যমে, পাইথন নতুন process তৈরি করে। এখানে একটি process প্ৰায় সম্পূর্ণ ভিন্ন প্রোগ্রাম হিসাবে ভাবা যেতে পারে, যদিও প্রযুক্তিগতভাবে সেগুলিকে সাধারণত resource collection হিসাবে সংজ্ঞায়িত করা হয় যেখানে resource মধ্যে রয়েছে memory, file handle এবং এই জাতীয় জিনিস। এটি সম্পর্কে চিন্তা করার একটি উপায় হল প্রতিটি process তার নিজস্ব পাইথন ইন্টারপ্রেটারে চলে। যেহেতু সেগুলি বিভিন্ন processing, একটি মাল্টিপ্রসেসিং প্রোগ্রামে Train of Thoughts একটি ভিন্ন core এ চলতে পারে। একটি ভিন্ন core এ চালানোর মানে হল যে তারা আসলে একই সময়ে চালাতে পারে, যা কল্পিত, একেই বলে parallelism। এটি করার ফলে কিছু জটিলতা দেখা দেয়, তবে পাইথন বেশিরভাগ সময় তাদের maintained রাখার জন্য ভালোই performance দেয় ৷

Multiprocessing in a Nutshell

স্ট্যান্ডার্ড লাইব্রেরিতে মাল্টিপ্রসেসিং একাধিক CPU জুড়ে কোড চালানোর জন্য ডিজাইন করা হয়েছিল। high level e, এটি প্রতিটি সিপিইউতে চালানোর জন্য পাইথন interpreter একটি নতুন উদাহরণ তৈরি করে এবং তারপরে এটি চালানোর জন্য আপনার প্রোগ্রামের কিছু অংশ তৈরি করে এটি করে। । আপনি যেমন কল্পনা করতে পারেন, অন্য একটি পাইথন interpreter আনা বর্তমান পাইথন interpreter একটি নতুন thread শুরু করার মতো দ্রুত নয়। এটি একটি হেভিওয়েট অপারেশন এবং কিছু সীমাবদ্ধতা এবং অসুবিধার সাথে আসে, কিন্তু সঠিক সমস্যার জন্য, এটি একটি বিশাল পার্থক্য আনতে পারে।