"হ্যালো, অ্যামিগো! আমাদের কাছে একটি নতুন এবং খুব কঠিন বিষয় আছে। আমি দুঃখিত। এটি প্রায়শই জাভাতে নয়, সাধারণভাবে প্রোগ্রামিং-এও সবচেয়ে জটিল বিষয়গুলির মধ্যে একটি হিসাবে বিবেচিত হয়। আমি মাল্টিথ্রেডিংয়ের কথা বলছি। "

একটি সাধারণ কম্পিউটার গেম কল্পনা করুন, উদাহরণস্বরূপ, একটি স্পেসশিপ রেসিং গেম। আপনি মহাজাগতিক বিস্তৃতির মধ্য দিয়ে উড়ে যাচ্ছেন, উল্কাপাত এবং টহল ক্রুজারগুলিকে ফাঁকি দিচ্ছেন। এই অবৈধ দৌড়ে আপনার সাথে আরও দুই ডজন অংশ নিচ্ছে।

ধরা যাক আপনি এই ধরনের একটি খেলা লিখতে সিদ্ধান্ত নেন. আপনার প্রোগ্রামটিকে কমান্ডের (কীবোর্ড ইনপুট) ট্র্যাক রাখতে হবে, স্পেসশিপগুলিকে সরাতে হবে, তাদের গতিপথ গণনা করতে হবে, কোনও সংঘর্ষের পরিণতি নির্ধারণ করতে হবে এবং ব্যবহারকারীর স্ক্রিনে এগুলি আঁকতে হবে। এটা খুবই জটিল কাজ।

মনে রাখবেন কিভাবে আমরা ক্রমবর্ধমান শিপিং কোম্পানির উদাহরণে «মহান জটিলতার সমস্যা» সমাধান করেছি?

আমরা এটিকে স্বাধীন বিভাগে বিভক্ত করেছি এবং কঠোরভাবে নির্দিষ্ট করেছি (প্রমিত) কিভাবে তারা যোগাযোগ করতে পারে।

"কিন্তু আমরা কি করব যখন স্বাধীন অংশগুলিকে অন্যান্য অংশের সমান্তরালে কিছু কাজ করতে হয়?! এই প্রশ্নের উত্তর হল থ্রেড ।"

একটি প্রোগ্রামকে একটি ছোট রোবট হিসাবে কল্পনা করার চেষ্টা করুন যা কোডের চারপাশে চলে এবং কমান্ডগুলি চালায় । প্রথমে, এটি একটি লাইনে একটি কমান্ড কার্যকর করে, তারপরে পরবর্তীতে চলে যায় এবং আরও অনেক কিছু।

"আমি মনে মনে এটা দেখতে পাচ্ছি। কেকের টুকরো!"

"খুব ভাল। এবং এখন কল্পনা করুন যে আপনার কাছে এই কয়েকটি রোবট রয়েছে। একজন ব্যবহারকারীর ইনপুট পরিচালনা করার সময়, একটি সেকেন্ড সেই ইনপুটের উপর ভিত্তি করে অবজেক্ট আপডেট করছে। তৃতীয় একজন এই বস্তুগুলিকে স্ক্রিনে প্রদর্শন করার জন্য কোডটি কার্যকর করে। সেকেন্ডে কয়েকবার, চতুর্থটি কোন জাহাজের সংঘর্ষ হয়েছে কিনা তা পরীক্ষা করে এবং যদি সেগুলি হয়ে থাকে তবে সংঘর্ষের ফলাফল গণনা করে।"

এইভাবে, আমরা প্রোগ্রামটিকে শুধুমাত্র স্বাধীন অংশ/বস্তুতে বিভক্ত করতে পারি না, তবে এটি তৈরি করতে পারি যাতে এই অংশগুলি একে অপরের থেকে স্বাধীনভাবে তাদের কাজ সম্পাদন করতে পারে। স্বতন্ত্র অংশগুলির মধ্যে কম মিথস্ক্রিয়া, কম জটিল প্রোগ্রাম।

কল্পনা করুন যে আপনি ম্যানেজারকে একটি স্ক্রিপ্ট দিয়ে প্রতিস্থাপন করতে সক্ষম হয়েছেন যা চিঠি পাঠায় । এবং অন্যান্য কোম্পানি বিভাগ এমনকি একটি পরিবর্তন হয়েছে বলতে সক্ষম ছিল না. এই ধরণের জিনিসটি 26 শতকের প্রথম দিকে চমৎকার ফলাফলের সাথে ঘটেছে। বেশিরভাগ ম্যানেজার, এমনকি শীর্ষ নির্বাহীদেরও সফলভাবে গড় জটিলতার স্ক্রিপ্ট দ্বারা প্রতিস্থাপিত করা যেতে পারে। "অফিস প্ল্যাঙ্কটন ইউনিয়ন" হস্তক্ষেপ করার পরেই ম্যানেজারদের ব্যাপক ছাঁটাই শেষ হয়েছিল। কিন্তু আমার দ্বিমত আছে.

"কি চমৎকার!"

"শুধুমাত্র এই "ছোট রোবট" এক্সিকিউটিং কোডগুলির মধ্যে বেশ কয়েকটি থাকতে পারে না, তারা একে অপরের সাথে যোগাযোগ করতে পারে এবং নতুন রোবট তৈরি করতে পারে।"

"নতুন রোবট তৈরি করবেন?"

"হ্যাঁ, নতুন কাজ সম্পাদন করতে। মাঝে মাঝে বর্তমান থ্রেডের (রোবট) মতো একই সময়ে কিছু কাজ সম্পাদন করার জন্য অন্য রোবট (অন্য থ্রেড) তৈরি করা সুবিধাজনক।"

" এটি একটি ভাল জিনিসের মত শোনাচ্ছে, কিন্তু আমি এটি কোথায় ব্যবহার করব তা ভাবতে পারছি না। "

এবং কেন আমরা তাদের " থ্রেড " বলি?

"ভাবুন যে প্রতিটি রোবট একটি ভিন্ন রঙ, এবং এটি তাদের সম্পাদন করার সাথে সাথে তার রঙের সাথে কমান্ডগুলিকে চিহ্নিত করে৷ ছোট রোবট দ্বারা নেওয়া পথটি একটি পেন্সিলের পিছনে রেখে যাওয়া রেখার মতো৷ এই পথটি রোবটের পিছনে একটি সুতোর মতো স্ট্রিং করে একটি সুচ."

প্রতিটি "ছোট রোবট" এর একটি কাজ রয়েছে যা এটি সম্পাদন করার জন্য তৈরি করা হয়েছিল। আপনি একটি থ্রেড মনে করতে পারেন এই কাজটি সম্পাদন করার সময় কার্যকর করা কমান্ডের সেট।

ধরুন আপনি পণ্যসম্ভার সরবরাহ করার জন্য একটি স্পেসশিপে উড়ছেন। তারপর "মালপত্র বিতরণ" আপনার কাজ, এবং আপনি এটি সম্পাদনের মাঝখানে আছেন। এবং আপনার ফ্লাইট পথ আপনার থ্রেড. আমরা বলতে পারি যে প্রতিটি নতুন কাজ, প্রতিটি কাজ এখনও সম্পূর্ণ হয়নি, এর নিজস্ব থ্রেড রয়েছে (একটি পথ যা এখনও অতিক্রম করতে হবে)।

"অন্য কথায়, একটি টাস্ক এবং একটি "ছোট রোবট" আছে যা এটি সম্পাদন করে। এবং একটি থ্রেড হল রোবট দ্বারা নেওয়া পথটি যখন এটি তার কাজটি সম্পূর্ণ করে?"

"ঠিক।"

এভাবেই সবকিছু গভীরভাবে কাজ করে। কম্পিউটারে শুধুমাত্র একটি প্রসেসর থাকায় এটি একবারে একটি মাত্র কমান্ড কার্যকর করতে পারে। তাই এখানে যা ঘটে: প্রসেসর ক্রমাগত থ্রেডের মধ্যে সুইচ করে। এটি একটি নতুন থ্রেডে সুইচ করে, কয়েকটি কমান্ড কার্যকর করে, তারপর পরবর্তী থ্রেডে সুইচ করে, কয়েকটি কমান্ড কার্যকর করে এবং আরও অনেক কিছু। কিন্তু যেহেতু থ্রেডের মধ্যে স্যুইচিং প্রতি সেকেন্ডে শত শত বার ঘটে, তাই আমাদের কাছে মনে হচ্ছে সব থ্রেড একই সাথে চলছে।

মাল্টিথ্রেডিং - 1