থ্রেড এবং একটি ফাইবারের মধ্যে পার্থক্য কী? আমি রুবি থেকে তন্তু সম্পর্কে শুনেছি এবং শুনেছি তারা অন্যান্য ভাষায় উপলভ্য, কেউ কি আমাকে সহজ ভাষায় ব্যাখ্যা করতে পারে যে থ্রেড এবং ফাইবারের মধ্যে পার্থক্য কী।
থ্রেড এবং একটি ফাইবারের মধ্যে পার্থক্য কী? আমি রুবি থেকে তন্তু সম্পর্কে শুনেছি এবং শুনেছি তারা অন্যান্য ভাষায় উপলভ্য, কেউ কি আমাকে সহজ ভাষায় ব্যাখ্যা করতে পারে যে থ্রেড এবং ফাইবারের মধ্যে পার্থক্য কী।
উত্তর:
সর্বাধিক সাধারণ ভাষায়, থ্রেডগুলি সাধারণত অপরিহার্য হিসাবে বিবেচিত হয় (যদিও এটি অপারেটিং সিস্টেমের উপর নির্ভর করে সর্বদা সত্য হতে পারে না) যখন তন্তুগুলি হালকা ওজন, সমবায় থ্রেড হিসাবে বিবেচিত হয়। উভয়ই আপনার অ্যাপ্লিকেশনের জন্য পৃথক সম্পাদনের পথ।
থ্রেড সহ: বর্তমান সম্পাদনার পথটি যে কোনও সময় বাধাগ্রস্ত হতে পারে বা প্রিম্প্ট করা যেতে পারে (দ্রষ্টব্য: এই বিবৃতিটি একটি সাধারণীকরণ এবং ওএস / থ্রেডিং প্যাকেজ / ইত্যাদির উপর নির্ভর করে সর্বদা সত্য নাও থাকতে পারে)। এর অর্থ এই যে থ্রেডগুলির জন্য, ডেটা অখণ্ডতা একটি বড় সমস্যা কারণ একটি থাড্ড ডেটা বিশিষ্ট আপডেট করার মাঝে থামানো যেতে পারে, ডেটাটির সততা খারাপ বা অসম্পূর্ণ অবস্থায় রেখে leaving এর অর্থ হ'ল অপারেটিং সিস্টেম একই সাথে একাধিক থ্রেড চালিয়ে এবং ডেটা অ্যাক্সেস রক্ষা করতে বিকাশকারীকে ছেড়ে একাধিক সিপিইউ এবং সিপিইউ কোরের সুবিধা নিতে পারে।
ফাইবার সহ: ফায়ার কার্যকর হলে (বর্তমান হিসাবে একই নোট) ফলন করার সাথে সাথে বর্তমানে সম্পাদনের পথে বাধা দেওয়া হয়। এর অর্থ হ'ল ফাইবারগুলি সর্বদা সু-সংজ্ঞায়িত স্থানে শুরু হয় এবং থামে, তাই ডেটা অখণ্ডতা কোনও সমস্যার থেকে অনেক কম। এছাড়াও, কারণ তন্তুগুলি প্রায়শই ব্যবহারকারীর জায়গাতে পরিচালিত হয়, ব্যয়বহুল প্রসঙ্গের স্যুইচ এবং সিপিইউ রাষ্ট্রীয় পরিবর্তনগুলি করা দরকার না, যার ফলে একটি ফাইবার থেকে পরের অত্যন্ত দক্ষ হয়ে উঠতে হবে to অন্যদিকে, যেহেতু কোনও দুটি ফাইবার একই সময়ে চলতে পারে না, কেবল একমাত্র ফাইবার ব্যবহার করা একাধিক সিপিইউ বা একাধিক সিপিইউ কোরের সুবিধা গ্রহণ করবে না।
থ্রেডগুলি প্রাক-অভিমুখে নির্ধারিত সময়সূচী ব্যবহার করে, যেখানে তন্তুগুলি সমবায় নির্ধারিত সময়সূচী ব্যবহার করে ।
একটি থ্রেড সহ, নিয়ন্ত্রণ প্রবাহ যে কোনও সময় বাধা পেতে পারে এবং অন্য একটি থ্রেড নিতে পারে over একাধিক প্রসেসরের সাহায্যে আপনার একসাথে একাধিক থ্রেড চলতে পারে ( একইসাথে বহুগুলি পাঠানো বা এসএমটি)। ফলস্বরূপ, আপনাকে সমবর্তী ডেটা অ্যাক্সেস সম্পর্কে খুব সতর্কতা অবলম্বন করতে হবে এবং মিটেক্সেস, সেমফোরস, কন্ডিশন ভেরিয়েবল এবং এগুলি দিয়ে আপনার ডেটা রক্ষা করতে হবে। ডান পেতে এটি প্রায়শই জটিল।
একটি ফাইবার সহ, যখন আপনি এটি বলুন কেবল তখনই স্যুইচগুলি নিয়ন্ত্রণ করুন, সাধারণত কোনও ফাংশন কল দিয়ে এর মতো নামকরণ করা হয় yield()
। এটি সমবর্তী ডেটা অ্যাক্সেসকে সহজ করে তোলে, যেহেতু আপনাকে ডেটা স্ট্রাকচার বা মিটেক্সেসের পারমাণবিকতা নিয়ে চিন্তা করতে হবে না। যতক্ষণ না আপনি ফলন করেন ততক্ষণ প্যাকেজড হওয়ার এবং অন্য ফাইবার থাকার সাথে আপনার কাজ করা ডেটা পড়ার বা সংশোধন করার চেষ্টা করার কোনও আশঙ্কা নেই । ফলস্বরূপ, যদিও, যদি আপনার ফাইবার একটি অসীম লুপের মধ্যে চলে যায়, আপনি ফলন না করায় অন্য কোনও ফাইবার চলতে পারে না।
আপনি থ্রেড এবং ফাইবারগুলিও মিশ্রিত করতে পারেন যা উভয়ই সমস্যার সম্মুখীন হয়। প্রস্তাবিত নয়, তবে সাবধানতার সাথে করা হলে কখনও কখনও এটি করা সঠিক জিনিস হতে পারে।
উইন 32 এ, একটি ফাইবার হ'ল ব্যবহারকারী-পরিচালিত থ্রেডের এক প্রকার। একটি ফাইবারের নিজস্ব স্ট্যাক এবং নিজস্ব নির্দেশ পয়েন্টার ইত্যাদি থাকে তবে তন্তুগুলি ওএস দ্বারা নির্ধারিত হয় না: আপনাকে সুইচটোফাইবারকে স্পষ্টভাবে কল করতে হবে। বিপরীতে থ্রেডগুলি অপারেশন সিস্টেম দ্বারা প্রাক-শূণ্যভাবে নির্ধারিত হয়। সুতরাং মোটামুটিভাবে একটি ফাইবারের কথা বলা একটি থ্রেড যা সত্য ওএস থ্রেড হওয়ার চেয়ে অ্যাপ্লিকেশন / রানটাইম স্তরে পরিচালিত হয়।
এর পরিণতিগুলি হ'ল ফাইবারগুলি সস্তা এবং অ্যাপ্লিকেশনটির সময় নির্ধারণের উপর আরও নিয়ন্ত্রণ রয়েছে। যদি অ্যাপটি প্রচুর পরিমাণে সামঞ্জস্যপূর্ণ কাজ তৈরি করে এবং / অথবা যখন তারা চালায় তখন ঘনিষ্ঠভাবে অনুকূল করতে চায় তবে এটি গুরুত্বপূর্ণ হতে পারে। উদাহরণস্বরূপ, একটি ডাটাবেস সার্ভার থ্রেডের চেয়ে ফাইবার ব্যবহার করতে পছন্দ করতে পারে।
(একই শব্দটির জন্য অন্যান্য ব্যবহার থাকতে পারে; যেমন উল্লেখ করা হয়েছে, এটি উইন 32 সংজ্ঞা রয়েছে।)
প্রথমে আমি ব্যাকগ্রাউন্ড উপাদান হিসাবে প্রক্রিয়া এবং থ্রেড মধ্যে পার্থক্য এই ব্যাখ্যা পড়ার সুপারিশ করব ।
একবার আপনি পড়েছেন যে এটি বেশ সোজা সামনে। থ্রেড ক্যানগুলি কার্নেলে, ব্যবহারকারীর জায়গায়, অথবা দুটি মিশ্রিত করা যেতে পারে। ফাইবারগুলি মূলত ব্যবহারকারীর স্থানে থ্রেড প্রয়োগ করা হয়।
আধুনিক অপারেটিং সিস্টেমগুলির 11.4 বিভাগে "উইন্ডোজ ভিস্তার প্রসেসস এবং থ্রেডস" বিভাগে, তেনেনবাম মন্তব্য করেছেন:
যদিও তন্তুগুলি সমবায় ভিত্তিতে নির্ধারিত হয়, তবে যদি একাধিক থ্রেডগুলি তন্তুগুলির সময়সূচী করে থাকে, তবে ফাইবারগুলি একে অপরের সাথে হস্তক্ষেপ না করে তা নিশ্চিত করার জন্য প্রচুর যত্নবান সমন্বয় প্রয়োজন। থ্রেড এবং ফাইবারের মধ্যে মিথস্ক্রিয়াকে সহজ করার জন্য, প্রসেসরগুলি চালনার জন্য কেবল যতগুলি থ্রেড তৈরি করা যায় তা প্রায়শই দরকারী, এবং কেবলমাত্র প্রসেসরের একটি স্বতন্ত্র সেটে, এমনকি কেবল একটি প্রসেসরের প্রতিটি থ্রেডকে সংযুক্ত করে তোলা। প্রতিটি থ্রেড তখন তন্তুগুলির একটি নির্দিষ্ট উপসেট চালাতে পারে, থ্রেড এবং ফাইবারগুলির মধ্যে একের সাথে একাধিক সম্পর্ক স্থাপন করে যা সুসংগতকরণকে সহজ করে। তবুও তন্তুগুলি নিয়ে এখনও অনেক সমস্যা রয়েছে। বেশিরভাগ উইন 32 লাইব্রেরি ফাইবার সম্পর্কে সম্পূর্ণ অসচেতন, এবং অ্যাপ্লিকেশনগুলি যেগুলি ফাইবারগুলি ব্যবহার করার চেষ্টা করে যেন তারা থ্রেডগুলি বিভিন্ন ব্যর্থতার সম্মুখীন হয়। কার্নেলের তন্তুগুলির কোনও জ্ঞান নেই, এবং যখন কোনও ফাইবার কার্নেলে প্রবেশ করে, তখন এটি চালিত থ্রেডটি ব্লক করতে পারে এবং কার্নেল প্রসেসরের উপর একটি নির্বিচার থ্রেড নির্ধারণ করবে, এটি অন্যান্য তন্তুগুলি চালানোর জন্য অনুপলব্ধ করে তোলে। এই কারণে ফাইবারগুলি খুব কমই ব্যবহৃত হয় কেবলমাত্র অন্য সিস্টেমগুলি থেকে কোড পোর্ট করার সময় যা ফাইবারের দ্বারা সরবরাহিত কার্যকারিতার স্পষ্টতই প্রয়োজন।
নোট করুন যে থ্রেড এবং ফাইবারগুলি ছাড়াও, উইন্ডোজ 7 ব্যবহারকারী-মোডের সময়সূচী প্রবর্তন করে :
ব্যবহারকারী-মোড শিডিয়ুলিং (ইউএমএস) একটি হালকা ওজন প্রক্রিয়া যা অ্যাপ্লিকেশনগুলি তাদের নিজস্ব থ্রেডগুলি নির্ধারণ করতে ব্যবহার করতে পারে। কোনও অ্যাপ্লিকেশন সিস্টেম শিডিয়ুলারকে জড়িত না করে ব্যবহারকারী মোডে ইউএমএস থ্রেডের মধ্যে স্যুইচ করতে পারে এবং কার্নেলের কোনও ইউএমএস থ্রেড ব্লক করে রাখলে প্রসেসরের নিয়ন্ত্রণ ফিরে পেতে পারে। ইউএমএস থ্রেডগুলি ফাইবারের থেকে পৃথক হয় যে প্রতিটি ইউএমএস থ্রেডের একক থ্রেডের থ্রেড প্রসঙ্গটি ভাগ না করে তার নিজস্ব থ্রেড প্রসঙ্গ থাকে। ব্যবহারকারী মোডে থ্রেডের মধ্যে স্যুইচ করার ক্ষমতাটি ইউএসএসকে সংখ্যক স্বল্প-মেয়াদী কাজের আইটেমগুলির পরিচালনা করার জন্য থ্রেড পুলের চেয়ে বেশি দক্ষ করে তোলে যার জন্য কয়েকটি সিস্টেম কল প্রয়োজন।
থ্রেড, ফাইবার এবং ইউএমএস সম্পর্কে আরও তথ্য ডেভ প্রোবার্ট: ইনসাইড উইন্ডোজ 7 - ইউজার মোড শিডিয়ুলার (ইউএমএস) দেখে উপলব্ধ ।
থ্রেডগুলি ওএস (প্রাক-উদ্দীপক) দ্বারা নির্ধারিত হয়। কোনও থ্রেড ওএস দ্বারা যে কোনও সময় বন্ধ বা পুনরায় শুরু হতে পারে তবে তন্তুগুলি কমবেশি নিজেকে পরিচালনা করে (সমবায়) এবং একে অপরের প্রতি ফলন দেয়। এটি হ'ল, প্রোগ্রামার যখন ফাইবারগুলি তাদের প্রসেসিং করে এবং যখন সেই প্রক্রিয়াকরণটি অন্য ফাইবারের দিকে চলে যায় তখন নিয়ন্ত্রণ করে।
থ্রেডগুলি সাধারণত সুতোর বিঘ্ন ঘটানোর জন্য কার্নেলের উপর নির্ভর করে যাতে এটি বা অন্য কোনও থ্রেড চলতে পারে (এটি প্রি-এমপ্রেটিভ মাল্টিটাস্কিং নামে পরিচিত) অন্যদিকে তন্তুগুলি সমবায় মাল্টিটাস্কিং ব্যবহার করে যেখানে এটি ফাইবার নিজেই চলমান সময়কে ছেড়ে দেয় যাতে অন্যান্য তন্তু চালাতে পারে।
এটির চেয়ে ভাল ব্যাখ্যা করার মতো কিছু দরকারী লিঙ্কগুলি সম্ভবতঃ
থ্রেডগুলি মূলত লাইটওয়েট প্রক্রিয়া হিসাবে তৈরি করা হয়েছিল। অনুরূপ ফ্যাশনে, ফাইবারগুলি একটি হালকা ওজনের থ্রেড হয়, নিয়ামক নিয়ন্ত্রণের মাধ্যমে একে অপরকে নির্ধারিত করার জন্য তন্তুগুলিতে নিজেকে (সরলিকভাবে) নির্ভর করে।
আমি অনুমান করি যে পরবর্তী পদক্ষেপটি এমন স্ট্র্যান্ড হবে যেখানে আপনি যখনই কোনও নির্দেশিকাটি প্রয়োগ করতে চান তাদের প্রতিবার তাদের সিগন্যাল প্রেরণ করতে হবে (আমার 5 বছর বয়সী ছেলের সাথে :-) নয়)। পুরানো দিনগুলিতে (এবং এখন কিছু এম্বেড থাকা প্ল্যাটফর্মগুলিতেও), সমস্ত থ্রেডগুলি তন্তু ছিল, কোনও প্রাক-উত্সাহ ছিল না এবং আপনাকে সুন্দরভাবে আচরণ করার জন্য আপনার থ্রেডগুলি লিখতে হয়েছিল।
উইন 32 ফাইবার সংজ্ঞা আসলে সান মাইক্রোসিস্টেমগুলিতে প্রতিষ্ঠিত "গ্রিন থ্রেড" সংজ্ঞা। কোনও ধরণের থ্রেডে ফাইবার শব্দটি নষ্ট করার দরকার নেই, অর্থাত, ব্যবহারকারী কোড / থ্রেড-লাইব্রেরি নিয়ন্ত্রণের অধীনে ব্যবহারকারী স্পেসে চালিত একটি থ্রেড।
যুক্তিটি স্পষ্ট করতে নীচের মন্তব্যগুলিতে দেখুন:
আমাদের ধরে নেওয়া উচিত যে প্রক্রিয়াগুলি থ্রেড দিয়ে তৈরি এবং থ্রেডগুলি ফাইবার দিয়ে তৈরি হওয়া উচিত। সেই যুক্তিটি মাথায় রেখে, অন্য ধরণের থ্রেডের জন্য তন্তু ব্যবহার করা ভুল।