থ্রেড দুটি দৃষ্টিভঙ্গিতে উঠে আসে: অপারেটিং সিস্টেম এবং প্রোগ্রামিং ভাষা। উভয় ক্ষেত্রেই একটি থ্রেডের বৈশিষ্ট্যগুলির মধ্যে কিছু প্রকারভেদ রয়েছে।
কোনও থ্রেডের একটি ন্যূনতম সংজ্ঞা হ'ল এটি এমন জিনিস যা ক্রমানুসারে ঘটে, একের পর এক জিনিস।
একটি সাধারণ মেশিন এক্সিকিউশন মডেলে, প্রতিটি থ্রেডের নিজস্ব-সাধারণ রেজিস্টারগুলির নিজস্ব সেট এবং নিজস্ব প্রোগ্রামের কাউন্টার থাকে। যদি মেশিনটি স্ট্যাক পয়েন্টার হিসাবে একটি নির্দিষ্ট রেজিস্ট্রার সেট করে, প্রতি থ্রেডে একটি অনুলিপি রয়েছে।
অপারেটিং সিস্টেমের দৃষ্টিকোণ থেকে, থ্রেডগুলিকে সমর্থন করতে সর্বনিম্ন একটি অপারেটিং সিস্টেমের দরকার হয় তাদের মধ্যে পরিবর্তন করার একটি উপায় সরবরাহ করা। এটি স্বয়ংক্রিয়ভাবে ঘটতে পারে ( প্রিমিটিভ মাল্টিটাস্কিং বা কেবল যখন থ্রেডটি একটি স্পষ্ট অনুরোধ জানায় (সমবায় মাল্টিটাস্কিং; সেক্ষেত্রে থ্রেডগুলিকে মাঝে মাঝে ফাইবার বলা হয় )। এছাড়াও এখানে উভয় প্রাইমেশন এবং সমবায় ফলন সহ সংকর মডেল রয়েছে, যেমন বিভিন্ন গ্রুপের থ্রেডের মধ্যে প্রিম্পেশন। কাজগুলি বা একই গ্রুপ / টাস্কের থ্রেডের মধ্যে স্পষ্ট ফলন threads
একটি মাল্টিটাস্কিং অপারেটিং সিস্টেম যা কার্যগুলির মধ্যে বিচ্ছিন্নতা সরবরাহ করে (বা প্রক্রিয়াগুলি , আপনি এই শর্তাদি কোনও ওএস প্রসঙ্গে সমার্থক শব্দ হিসাবে বিবেচনা করতে পারেন), প্রতিটি টাস্কের নিজস্ব উত্স থাকে, নির্দিষ্ট ঠিকানার জায়গাতে, তবে ফাইলগুলি, সুযোগ-সুবিধা ইত্যাদি খোলা থাকে বিচ্ছিন্নতা has অপারেটিং সিস্টেম কার্নেল দ্বারা সরবরাহ করা হবে , এমন একটি সত্তা যা প্রক্রিয়াগুলির উপরে। প্রতিটি কার্যক্রমে সাধারণত কমপক্ষে একটি থ্রেড থাকে - এমন একটি কার্য যা কোড চালায় না তা খুব বেশি কাজে লাগে না। অপারেটিং সিস্টেম একই কার্যক্রমে একাধিক থ্রেড সমর্থন করতে পারে বা নাও করতে পারে; উদাহরণস্বরূপ আসল ইউনিক্স তা করেনি। কোনও কাজ এখনও তাদের মধ্যে স্যুইচ করার ব্যবস্থা করে একাধিক থ্রেড চালাতে পারে - এর জন্য কোনও বিশেষ সুযোগ-সুবিধার দরকার নেই। একে বলা হয় “ ব্যবহারকারী থ্রেড ””, বিশেষত ইউনিক্স প্রসঙ্গে। আজকাল বেশিরভাগ ইউনিক্স সিস্টেমগুলি কার্নেল থ্রেড সরবরাহ করে, বিশেষত কারণ একই প্রসেসের একাধিক থ্রেড বিভিন্ন প্রসেসরের উপর চলমান একমাত্র উপায়।
গণনার সময় বাদে বেশিরভাগ অপারেটিং সিস্টেমের সংস্থানগুলি থ্রেডগুলিতে নয়, কার্যগুলিতে সংযুক্ত থাকে। কিছু অপারেটিং সিস্টেম (উদাহরণস্বরূপ, লিনাক্স) স্পষ্টতই স্ট্যাকগুলি সীমাবদ্ধ করে দেয়, যার ক্ষেত্রে প্রতিটি থ্রেডের নিজস্ব থাকে; তবে এমন ওএস রয়েছে যেখানে কর্নেল স্ট্যাকগুলি সম্পর্কে কিছুই জানে না, তারা যতদূর উদ্বিগ্ন, এটি গাদা অংশ। কার্নেল সাধারণত প্রতিটি থ্রেডের জন্য কার্নেল প্রসঙ্গ পরিচালনা করে, যা থ্রেড বর্তমানে কী করছে তা সম্পর্কিত তথ্য সহ একটি ডেটা স্ট্রাকচার; এটি একই সময়ে সিস্টেম কলে অবরুদ্ধ একাধিক থ্রেডকে কার্নেলটিকে পরিচালনা করতে দেয়।
অপারেটিং সিস্টেমের বিষয় হিসাবে, কোনও টাস্কের থ্রেডগুলি একই কোড চালায়, তবে সেই কোডের বিভিন্ন অবস্থানে রয়েছে (বিভিন্ন প্রোগ্রামের পাল্টা মানগুলি)। এটি হতে পারে বা নাও হতে পারে যে কোনও প্রোগ্রামের কোডের কিছু অংশ সর্বদা একটি নির্দিষ্ট থ্রেডে কার্যকর করা হয় তবে সাধারণত প্রচলিত কোড থাকে (যেমন ইউটিলিটি ফাংশন) যা কোনও থ্রেড থেকে কল করা যেতে পারে। সমস্ত থ্রেড একই ডেটা দেখবে, অন্যথায় এগুলিকে আলাদা আলাদা কাজ হিসাবে বিবেচনা করা হবে; যদি কিছু ডেটা কেবলমাত্র কোনও নির্দিষ্ট থ্রেড দ্বারা অ্যাক্সেস করা যায় তবে এটি সাধারণত অপারেটিং সিস্টেমের নয়, কেবল প্রোগ্রামিং ভাষার পুরোপুরি।
বেশিরভাগ প্রোগ্রামিং ভাষায়, স্টোরেজ একই প্রোগ্রামের থ্রেডের মধ্যে ভাগ করা হয়। এটি সমবর্তী প্রোগ্রামিংয়ের একটি ভাগ করা মেমরি মডেল; এটি খুব জনপ্রিয়, তবে খুব ত্রুটি-ঝুঁকির কারণও, প্রোগ্রামারকে সতর্কতা অবলম্বন করা উচিত যখন জাতি পরিস্থিতি ঘটতে পারে একই ধরণের একাধিক থ্রেড দ্বারা একই ডেটা অ্যাক্সেস করা যায়। নোট করুন যে এমনকি স্থানীয় ভেরিয়েবলগুলি থ্রেডের মধ্যে ভাগ করা যায়: "লোকাল ভেরিয়েবল" (সাধারণত) এর অর্থ এমন একটি ভেরিয়েবল যার নাম কেবল একটি ফাংশনটির একটি সম্পাদনের সময় বৈধ হয়, তবে অন্য থ্রেডটি সেই ভেরিয়েবলের জন্য একটি পয়েন্টার পেতে এবং এটি অ্যাক্সেস করতে পারে।
এছাড়াও প্রোগ্রামিং ভাষা রয়েছে যেখানে প্রতিটি থ্রেডের নিজস্ব স্টোরেজ রয়েছে এবং যোগাযোগ চ্যানেলগুলিতে বার্তা প্রেরণের মাধ্যমে তাদের মধ্যে যোগাযোগ ঘটে। এটি সমকালীন প্রোগ্রামিংয়ের বার্তাটি পাস করার মডেল। Erlangবার্তাটি পাস করার উপর ফোকাস করে এমন প্রধান প্রোগ্রামিং ভাষা; এর সম্পাদন পরিবেশে থ্রেডগুলির খুব হালকা হ্যান্ডলিং রয়েছে, এবং এটি বেশিরভাগ প্রোগ্রামিং ভাষাগুলির বিপরীতে যেখানে থ্রেড তৈরি করা তুলনামূলকভাবে ব্যয়বহুল এবং রানটাইম পরিবেশ খুব বড় সমর্থন করতে পারে না তার বিপরীতে অনেক স্বল্প-কালীন থ্রেড সহ রচিত প্রোগ্রামগুলিকে উত্সাহ দেয় run একই সাথে থ্রেডের সংখ্যা। এরলংয়ের ক্রমযুক্ত সাবসেট (ভাষার অংশ যা থ্রেডের মধ্যে ঘটে থাকে, বিশেষ করে ডেটা ম্যানিপুলেশনে) নিখুঁতভাবে কার্যকরী হয়; এইভাবে একটি থ্রেড কিছু ডেটাযুক্ত অন্য থ্রেডে একটি বার্তা প্রেরণ করতে পারে এবং থ্রেডটিকে অন্য থ্রেডটি ব্যবহার করার সময় সংশোধিত হওয়ার বিষয়ে চিন্তা করার দরকার নেই।
কিছু ভাষাগুলি থ্রেড-লোকাল স্টোরেজ অফার করে দুটি মডেলকে মিশ্রিত করে, কোনও বিশ্বব্যাপী থেকে থ্রেড-স্থানীয় স্টোরেজ অবস্থানের পার্থক্য করার জন্য টাইপ সিস্টেমের সাথে বা ছাড়াই। থ্রেড-লোকাল স্টোরেজ সাধারণত একটি সুবিধা বৈশিষ্ট্য যা কোনও চলক নামকে বিভিন্ন থ্রেডে বিভিন্ন স্টোরেজের অবস্থান নির্ধারণ করতে দেয়।
কিছু (কঠিন) ফলো-আপগুলি থ্রেডগুলি কী তা বুঝতে আগ্রহী হতে পারে:
- একাধিক থ্রেড সমর্থন করতে কোনও কার্নেলকে ন্যূনতম কী করতে হবে?
- মাল্টিপ্রসেসর পরিবেশে, একটি প্রসেসর থেকে অন্য প্রসেসরে থ্রেড স্থানান্তর করতে কী লাগে?
- অপারেটিং সিস্টেমের সমর্থন ছাড়াই এবং এর বিল্ট-ইন সমর্থন ব্যবহার না করে অপারেটিং সিস্টেমের সমর্থন ছাড়াই আপনার প্রিয় প্রোগ্রামিং ভাষায় সমবায় মাল্টিথ্রেডিং ( করাউটিনস ) বাস্তবায়নে কী লাগবে ? (সাবধান যে বেশিরভাগ প্রোগ্রামিং ভাষায় একক থ্রেডের অভ্যন্তরে কর্টাইনগুলি প্রয়োগ করতে প্রয়োজনীয় আদিমতার অভাব রয়েছে।)
- কোনও প্রোগ্রামিং ভাষার চেহারা দেখতে কেমন হতে পারে যদি এটির থ্রেডের সম্মতিযুক্ত কিন্তু কোন (স্পষ্ট) ধারণা নেই? (প্রধান উদাহরণ: পাই-ক্যালকুলাস ।)