শেয়ারড রিসোর্স, দ্বন্দ্ব, শেয়ার্ড এক্সেস - ১

"হাই, অ্যামিগো! আমি আপনাকে সম্পদ ভাগাভাগি করার বিষয়ে বলতে চাই। বিভিন্ন থ্রেড জুড়ে, স্বাভাবিকভাবেই।

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

"একটি প্রোগ্রামকে স্বাধীন (ঢিলেঢালাভাবে জোড়া) অংশে বিভক্ত করা খুবই উপকারী।"

"ভাবুন যে আপনার প্রোগ্রামটি অভ্যন্তরীণভাবে 100টি থ্রেডে বিভক্ত। কিন্তু আপনার কাছে শুধুমাত্র একটি ডুয়াল-কোর প্রসেসর রয়েছে। এর মানে হল প্রতিটি কোরে গড়ে 50টি থ্রেড কার্যকর করা হবে।"

"যদি আপনার প্রোগ্রামের কর্মক্ষমতা বাড়ানোর প্রয়োজন হয়, আপনি এটির জন্য একটি ডুয়াল-প্রসেসর সার্ভার এবং কয়েকটি মিষ্টি প্রসেসর কিনুন। এটি আপনাকে 32 কোর পর্যন্ত পেতে পারে, কর্মক্ষমতা 2-20 গুণ বৃদ্ধি পাবে। সংখ্যার উপর নির্ভর করে সত্যিকারের স্বাধীন অংশে এটি বিভক্ত।"

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

"তাই যে এটা সব সম্পর্কে কি."

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

"প্রথম, যেকোন প্রোগ্রামের এমন কাজ আছে যাকে আলাদা করা যায় না এবং বিভিন্ন থ্রেডে সমান্তরালে চালানো যায় না। দ্বিতীয়ত, সমস্ত থ্রেড একই প্রসেসরে কার্যকর করা হয়। আপনার যত বেশি থ্রেড থাকবে, প্রত্যেকটি কাজ তত ধীর হবে।"

"এবং, সবচেয়ে গুরুত্বপূর্ণভাবে, থ্রেডগুলি প্রায়শই একই বস্তু ব্যবহার করে (সাধারণত 'শেয়ারড রিসোর্স' বলা হয়)।"

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

"হ্যাঁ, আমার মনে আছে। আপনি সিঙ্ক্রোনাইজড কীওয়ার্ড ব্যবহার করে তা করেন।"

"একদম ঠিক."

"এবং যদি থ্রেডগুলি বিভিন্ন ফাইলে লেখা হয়?"

"আনুষ্ঠানিকভাবে, এগুলি বিভিন্ন বস্তু, তবে তারা সম্ভবত একই হার্ড ড্রাইভে রয়েছে।"

"তাহলে, প্রসেসরের ভিতরে কিছু সমান্তরাল করা কি সত্যিই সম্ভব?"

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

"আচ্ছা, তাহলে আমার কী করা উচিত? আমি কীভাবে বুঝব যে আমি অনেক থ্রেড তৈরি করব কি না?"

"এটি সরাসরি আপনার প্রোগ্রামের আর্কিটেকচার দ্বারা নির্ধারিত হয়৷ প্রতিটি প্রকল্পের নিজস্ব 'স্থপতি' থাকে যিনি প্রোগ্রামে ব্যবহৃত সমস্ত 'সম্পদ' জানেন, তাদের সীমাবদ্ধতা জানেন এবং সেগুলি কতটা ভাল/খারাপভাবে সমান্তরাল করা হয়েছে তা জানেন।"

"আর যদি আমি না জানি?"

"দুটি বিকল্প আছে:"

ক) এমন কারো তত্ত্বাবধানে কাজ করুন যিনি করেন

খ) নিজে থেকে কিছু গলদ খুঁজে বের করুন

"আমি একজন রোবট: আমি গলদ পাই না-শুধু দাঁত।"

"আচ্ছা, তাহলে কিছু ছিদ্র পান।"

"আমি দেখছি। ধন্যবাদ। আপনি কিছু বিষয় স্পষ্ট করেছেন যেগুলো নিয়ে আমি ইতিমধ্যেই ভাবতে শুরু করেছি।"