Skip to main content

থ্রেড কি? ( post -12 )

থ্রেড কি?


“A thread is a lightweight sub-process.”
বাংলাঃ থ্রেড হচ্ছে প্রোগ্রামে লিখা কোড অনুযায়ি কাজ করার কামলা।

বেশির ভাগ ওয়েবসাইটেই সার্চ করলে থ্রেডের এই টাইপ সব উত্তর ই দিবে।

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

আপনার কাজঃ রুম গুছানো।

কীভাবে গুছাবেন?
(i)                    আগে বেড গুছাইতে পারেন
(ii)                  পড়ার টেবিল গুছাইতে পারেন
(iii)                ঝাড়ু দিতে পারেন

আপনার কাজ কিন্তু একটাই, (রুম গুছানো)  কিন্তু এই কাজ করার জন্য নিজের সুবিধার্থে আপনি এভাবে ছোট ছোট ভাগ করে নিয়েছেন।
যদি ধরে নেয়  ( i ) , ( ii ), ( iii ) কাজ করতে আপনার প্রতিটা কাজ  ৫ মিনিট করে মোট = ১৫ মিনিট লেগেছে।

অকে , তাহলে আপনার কাজ ছিল রুম গুছানো। যেটা করতে আপনার ১৫ মিনিট লেগেছে।


ধরেন, ধরে নেন যখন আপনার আম্মা আপনাকে কাজ করতে বলল তখন আপনার সাথে আপনার বন্ধুরা ছিল।
তো আপনি যখন কাজ করতে যাচ্ছেন, তখন আপনার বন্ধুদের বললেন

ঐ তুই  ( i ) কর
ঐ তুই ( ii ) কর
আমি ( iii )  করছি

যখন তিনজনে একসাথে কাজটা করছেন তখন কিন্তু সবাই একসাথেই কামলা  খাটছেন,

কাজ শুরুর ঠিক ৫ মিনিট পর
১ম বন্ধুর কাজ  শেষ  ( i )
২য় বন্ধুর কাজ  শেষ ( ii )
আপনার কাজ  শেষ ( iii )

রুম গুছানো শেষ, কিন্তু এইবার মাত্র ৫ মিনিট লেগেছে।

এইটাতো আপনারা সবাই ই জানতেন যে একসাথে সবাই কাজ করলে কাজ শেষ করতে কম সময় লাগবে, তার মানে তো এই যে আপনারা “থ্রেড কি” এইটাও জানতেন। কাজ কিন্তু একটাই আপনি বন্ধুদের মাঝে ভাগ করে দিলেন যার ফলে কাজটা অনেক তারাতারি হয়ে গেল। যাদের মাঝে কাজ ভাগ করে দিলেন জাভা তাদের থ্রেড বলে। কেন বলে ? কেন এমন নাম?  যে দিয়েছে তার সাথে কোনোদিন দেখা হলে জিজ্ঞেস করে নিয়েন, কেমন?

মানে উপরে আপনার বন্ধুরা  থ্রেড , আপনিও থ্রেড ।

একটাই কাজ (রুম গুছানো ) যাদের মধ্যে ভাগ করে দিলাম তাদের নাম থ্রেড হয়ে গেল।

থ্রেডের ধারণা এটাই 

সিরিয়াস কথায় আসি, থ্রেডতো জাভার জিনিস এদের দিয়ে কি আপনি রুম গুছাইতে পারবেন? জাভা দিয়ে যা করতে পারবেন থ্রেড নামক কামলাদের সেখানে খাটাবো। অকে ?

আচ্ছা একটা কথা বললে কি বিশ্বাস করবেন?  করতে বাধ্য আপনি।
এতদিন  জাভা দিয়ে যে প্রোগ্রাম লিখেছেন তার মধ্যেও থ্রেড কাজ করেছে, জানতেন?  দেখবেন ?
প্রোগ্রামে Default  যে থ্রেড কাজ করে তার নাম ‘main’ ।


Exception in thread “main”
এক্সেপশন ইন থ্রেড মেইন, মানে ভুল হইসে এটা কোথায়? থ্রেডে। যেই থ্রেডের নাম মেইন। ওকে? আগেওতো কত্তবার দেখেছি এমন এরর।

উপরের রুম গুছানোর উদাহরণে যখন আপনি একাই রুম গুছালেন ১৫ মিনিটে তখন আপনার বন্ধুরা আপনার সাথে ছিল না, মেইন থ্রেডের অবস্থা ও সেম, সে একাই কামলা খাটে,  এই মেইন থ্রেডের কাজ থাকে পুরো প্রোগ্রামটা রান করা আর আপনার কাজ ছিল ঘর গুছানো।

এখন আমরা কি পারি না মেইন থ্রেডকে কিছু বন্ধু দিতে? মানে ওর সাথে কিছু কামলা দিতে, তাহলে কি হবে আমাদের প্রোগ্রামটা আরোও দ্রুত এক্সিকিউট হবে। থ্রেডে মূলত এগুলাই (কীভাবে আরো থ্রেড দিয়ে মেইন থ্রেডকে হেল্প করা যায়) আলোচনা হয় একটু যান্ত্রিক ভাষায়।



আপনি যখন রুম গুছালেন তখন কি করলেন আগে  ( i ) পরে  ( ii ) তারপর  ( iii ), এভাবে কাজটা শেষ করলেন । আবার একটা প্রোগ্রামও কি করে,

public class Test{
    public static void main(String[] args) {
        System.out.println("kaj shuru");

       for (int i = 1; i <= 10; i++) {
            System.out.println( I );
        }
       
        int a=5;
        while(a>0){
            System.out.println(a);
            a--;
        }
        System.out.println("kaj sesh");
    }
}

কাজ ১ ঃ System.out.println("kaj shuru"); ( প্রিন্ট করবে )
কাজ ২ঃ for (int i = 1; i <= 10; i++)   ( ১-১০ প্রিন্ট করবে )
কাজ ৩ঃ    int a=5;   ( ভ্যালু আস্যাইন করবে )
কাজ ৪ঃ        while(a>0)  ( ৫-১ পর্যন্ত প্রিন্ট করবে )
কাজ ৫ঃ        System.out.println("kaj sesh"); ( প্রিন্ট করবে )

‘main’ থ্রেডের ও কাজ কিন্তু একটাই, শুধু এই প্রোগ্রাম রান করা, কিন্তু  প্রোগ্রামের মধ্যে এই কাজ গুলা আছে ।

থ্রেড যদি একাই কাজ করে তাহলে তো থ্রেড ই, কিন্তু যখন বন্ধুরা আসে তখন তাদের একসাথে বলে  multi-thread ।  মানে ‘main’ thread  কে যখন বন্ধু দিয়ে দিব তখন তাদের একসাথে বলব মাল্টি-থ্রেড।

উপরের ৫টা কাজ যদি আমরা ভাগ করে দেই, তুই কাজ১ কর, তুই কাজ২ কর্‌,  তুই এইটা , তুই ঐটা , তাহলে আমাদের প্রোগ্রামটা তাড়াতাড়ি এক্সিকিউট হবে না?  এইটাই্‌, এইজন্যই থ্রেড।

"A thread is an independent path of execution within a program."

একটি থ্রেড একটি প্রোগ্রামকে এক্সিকিউট করার একটি স্বাধীন পথ।

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

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


আজ এতটুকুই, কিভাবে থ্রেড বানাতে হয় এগুলা পরের পোষ্টে দিব ইনশাল্লাহ।

Comments

Popular posts from this blog

IELTS Spoken Class Adminssion Scenario - 01

.......  Student: Hello, May I come in, sir ? Optional (student): May I sit ? Sir:  Please have a seat. Sir: How may I help you, Sir ? Student: I would like to admit in your spoken course. Sir: Oh sure. Student: How many days are there in a week ? Sir: There are three classes in a week. Student: What time do you offer class ? Sir: We have class at 11am / 4pm / 6pm / 8pm

Php Learning Time

 Differences of explode( ) and implode( ) in php: explode: একটা স্ট্রিংকে কোনো একটা সেপারেটরের বেসিসে অ্যারেতে কনভার্ট করে, যেমন  <?php $text="Hello How are you?"; print_r(explode(" ",$text)); ?> This will give output of  Array (     [0] => Hello     [1] => How     [2] => are     [3] => you? ) Differences of array_splice( ) and array_slice( ) ধরেন আসল অ্যারে হচ্ছে    $arr =[ "Hello" , "this" , "is" , "test" , "text" ];    এখন এটাকে স্লাইসিং করার জন্য আমরা উপরের দুইটা মেথড ই ব্যবহার করতে পারি , কিন্তু array_splice এটা ইউজ করলে অরজিনাল array ও চেঞ্জ হয়ে যাবে, মানে যদি আমরা এভাবে লিখি  $var2 = array_splice ( $arr , 0 , 2 );   তাইলে $var2 এর ভিতরে থাকবে ["Hello" , "this"] ,  আর অরজিনাল array তে বাকি থাকবে ["is", "test", "text"] কিন্তু যদি আমরা ইউজ করি তাহলে অরজিনাল array আগের মতোই থাকবে পাশাপাশি $var2 এর মধ্যে ভ্যালু গুলা এসে পড়বে  Array (     [0] => ...