Array মূলত Contiguous Memory Location ব্যবহার করে data store করে। ইন্টারনাল প্রসেসিং স্টেপস: Base Address: Array যখন তৈরি হয়, তখন মেমোরিতে তার শুরুর লোকেশন বা Base Address (ধরি, 1000) ফিক্সড হয়। Element Size: Array-এর ডেটা টাইপ অনুযায়ী প্রতিটি এলিমেন্টের সাইজ ফিক্সড থাকে (যেমন, Integer হলে 4 Bytes)। Direct Formula: যখন আপনি Array[4] চান, তখন CPU মেমোরিতে কোনো লুপ চালায় না। সে সরাসরি এই সূত্রটি ব্যবহার করে: Target Address = Base Address + (Index * Element Size) উদাহরণ: মেমোরিতে Array-এর শুরু যদি হয় 1000 নম্বর ঘরে এবং প্রতিটি এলিমেন্ট যদি 4 Bytes জায়গা নেয়, তবে ৪ নম্বর ইনডেক্সের অ্যাড্রেস হবে: 1000 + (4 * 4) = 1016 । CPU সরাসরি 1016 নম্বর অ্যাড্রেসে জাম্প করে ভ্যালু নিয়ে আসে। কোনো সার্চ বা লুপ লাগে না বলেই এটি O(1) । Python Dynamic Array Python list (যা আসলে একটি Dynamic Array) এই সমস্যাটি সমাধান করে References বা Pointers-এর মাধ্যমে। Dynamic array কিভাবে Element size fix করবে? আমার array তে যদি digit, string থাকে তখন কিভাবে element size আসবে? ar...
পাইথন প্রোগ্রামিংয়ে মাল্টি-থ্রেডিং (Multi-threading) এবং মাল্টি-প্রসেসিং (Multi-processing) হলো একই সাথে একাধিক কাজ (Concurrency) করার দুটি ভিন্ন উপায়। ১. মাল্টি-থ্রেডিং (Multi-threading) বাস্তব উদাহরণ: আপনার রেস্টুরেন্টে একজন প্রধান শেফ (CPU/Process) আছেন এবং তার আন্ডারে ৪ জন অ্যাসিস্ট্যান্ট শেফ (Threads) আছেন। তারা সবাই একই রান্নাঘরে (Memory Space) কাজ করছেন। একজন সবজি কাটছেন, একজন মসলা পিসছেন, একজন মাংস ধুচ্ছেন। তারা একই উপাদান এবং থালা-বাসন শেয়ার করছেন। কীভাবে কাজ করে: এখানে একটি মাত্র মেইন প্রোগ্রাম বা প্রসেসের ভেতরে একাধিক "থ্রেড" বা ছোট ছোট কাজের ধারা তৈরি হয়। এরা সবাই কম্পিউটারের একই মেমোরি (RAM) শেয়ার করে। কোথায় ব্যবহার করবেন (I/O Bound Tasks): যখন আপনার প্রোগ্রামে এমন কাজ থাকে যেখানে CPU-কে বসে থাকতে হয় (যেমন: ইন্টারনেট থেকে ফাইল ডাউনলোড করা, ডেটাবেজ থেকে ডেটা আনা, বা ইউজারের ইনপুটের জন্য অপেক্ষা করা)। পাইথনের সীমাবদ্ধতা (GIL): পাইথনে GIL (Global Interpreter Lock) নামের একটি লক থাকে। এর কারণে মাল্টি-থ্রেডিং করলেও পাইথন একসাথে মাত্র একটি থ্রেডকেই CPU ব্যবহার করতে দ...