থ্রেড কন্টেন্ট কি?


120

কেউ দয়া করে ব্যাখ্যা করতে পারেন যে থ্রেডের যুক্তি কী?

আমি এটি গুগল করেছি, তবে এর সহজ ব্যাখ্যা খুঁজে পাচ্ছি না।


9
সুতরাং এতে আপনার অস্পষ্ট ধারণা কী তা লিখুন, যাতে আপনি কোথায় থাকবেন তা আমরা দেখতে পারি বা আপনার বোঝাপড়াটি সঠিক হতে পারে।
জেমস ব্ল্যাক

উত্তর:


87

মূলত থ্রেড কনটেন্টেশন এমন একটি অবস্থা যেখানে বর্তমানে একটি থ্রেড লক / অবজেক্টের জন্য অপেক্ষা করছে যা বর্তমানে অন্য থ্রেডের দ্বারা অধিষ্ঠিত রয়েছে। সুতরাং, অন্য থ্রেড যে নির্দিষ্ট অবজেক্টটিকে আনলক না করে এই অপেক্ষার থ্রেডটি সেই অবজেক্টটি ব্যবহার করতে পারে না।


53
এই উত্তরটি অসম্পূর্ণ (অন্যদের মতো বেশিরভাগ)। লকটি এমন এক ধরণের জিনিস যা নিয়ে বিতর্ক হতে পারে তবে এটি কেবল এ জাতীয় জিনিস থেকে দূরে। লকলেস সংস্থানগুলির জন্যও বিতর্ক থাকতে পারে। (উদাহরণস্বরূপ, যদি দুটি থ্রেড একইভাবে পূর্ণসংখ্যার বৃদ্ধি করে তবে ক্যাশে পিং-পং করার কারণে তারা বিতর্ক সৃষ্টি করতে পারে experience কোনও লক জড়িত নয়))
ডেভিড শোয়ার্জ

গ্লোবাল ইন্টারপ্রেটার লক (জিআইএল) এর ক্ষেত্রে যেমন সিপিথনে, যেখানে একটি থ্রেড সর্বদা জিল জিআইএল অর্জন করতে পারে, একই প্রক্রিয়াটিতে চলমান একাধিক থ্রেড ডিফল্টরূপে বিতর্কিত হয়।
একিউম্যানাস

আমি মনে করি আপনি এটি ডেডলকের ক্ষেত্রে ব্যাখ্যা করেছেন তবে এটি ডেডলকের থেকে অনেক আলাদা।
হর্ষিত গুপ্ত

185

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

বিতর্কের সর্বাধিক সুস্পষ্ট উদাহরণ হ'ল লকটিতে। যদি থ্রেড এ এর ​​একটি লক থাকে এবং থ্রেড বি একই লকটি অর্জন করতে চায় তবে থ্রেড বি থ্রেড এ লকটি প্রকাশ না হওয়া পর্যন্ত অপেক্ষা করতে হবে।

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

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

কেন? বলুন যে প্রতিটি থ্রেড তার নিজস্ব কোরটিতে একটি আধুনিক x86 সিপিইউতে চলছে এবং কোরগুলি একটি এল 2 ক্যাশে ভাগ করে না। মাত্র একটি থ্রেডের সাহায্যে অবজেক্টটি বেশিরভাগ সময় এল 2 ক্যাশে থাকতে পারে। উভয় থ্রেড চলমান রয়েছে, প্রতিবার একটি থ্রেড বস্তুটি সংশোধন করে, অন্য থ্রেডটি দেখতে পাবে যে ডেটাটি তার L2 ক্যাশে নেই কারণ অন্য সিপিইউ ক্যাশে লাইনটি অবৈধ করেছে। একটি পেন্টিয়াম ডি তে, উদাহরণস্বরূপ, এটি কোডটি এফএসবি গতিতে চালিত করবে, যা এল 2 ক্যাশে গতির চেয়ে অনেক কম less

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

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


4
+1 এছাড়াও, কেবল এটি স্পষ্ট করার জন্য, দুটি কোর যে দুটি ভেরিয়েবলের সাথে লড়াই করছে তা বিতর্ক সৃষ্টির জন্য একই ভেরিয়েবলের প্রয়োজন হয় না, তাদের কেবল একই ক্যাশে লাইনে মেমোরিতে সংরক্ষণ করতে হবে। প্যাডিং স্ট্রাকচার এবং / বা স্ট্রাকচারগুলিকে মেমোরিতে সারিবদ্ধ করা এই ফর্মটিকে এড়িয়ে চলতে সহায়তা করতে পারে।
রব_ফরফ_এডিটস

1
@David সাহায্য করুন আরো বিস্তারিত আপনার উত্তর শেষ পাড়া বুঝতে
শিক্ষার্থী

4
@ নারোজি এটি সম্পর্কে একটি প্রশ্ন জিজ্ঞাসা করুন।
ডেভিড শোয়ার্টজ

@ ডেভিডশওয়ার্টজ, আপনি কি একজন সি প্রোগ্রামার?
পেসারিয়ার

@ পেসারিয়ার সি ++ বেশিরভাগ ক্ষেত্রে।
ডেভিড শোয়ার্জ

19

থেকে এখানে :

একটি তর্ক তখনই ঘটে যখন থ্রেড এমন কোনও সংস্থার জন্য অপেক্ষা করে যা সহজেই পাওয়া যায় না; এটি আপনার কোডটির কার্যকরকরণকে ধীর করে দেয়, তবে সময়ের সাথে সাথে এটি পরিষ্কার করতে পারে।

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


এটি থ্রেড কনটেন্ট এবং ডেডলকের মধ্যে পার্থক্যও ব্যাখ্যা করে
संकल्प 11

3

আমি মনে করি প্রশ্নের পটভূমিতে ওপি থেকে কিছু স্পষ্ট হওয়া উচিত - আমি ২ টি উত্তর সম্পর্কে ভাবতে পারি (যদিও আমি নিশ্চিত যে এই তালিকার সংযোজন রয়েছে):

  1. যদি আপনি থ্রেড বিবাদের সাধারণ "ধারণা" উল্লেখ করছেন এবং এটি কীভাবে কোনও অ্যাপ্লিকেশনে নিজেকে উপস্থাপন করতে পারে তবে আমি উপরে @ ডেভিডসওয়ার্টজের বিস্তারিত উত্তরটি স্থগিত করছি।

  2. এখানে '.NET সিএলআর লক্স এবং থ্রেডস: মোট # বিতর্ক রয়েছে' পারফরম্যান্স কাউন্টার। এই কাউন্টারটির জন্য পারফমোন বর্ণনা থেকে নেওয়া হিসাবে এটি সংজ্ঞায়িত করা হয়েছে:

    এই কাউন্টারে সিএলআর-এর থ্রেডগুলির মোট সংখ্যাটি প্রদর্শিতভাবে ব্যর্থভাবে একটি পরিচালিত লক অর্জনের চেষ্টা করে। পরিচালিত লকগুলি বিভিন্ন উপায়ে অর্জিত হতে পারে; সি # তে "লক" বিবৃতি দ্বারা বা System.Monitor.Enter কল করে বা মেথোডিম্পল্পশনগুলি ব্যবহার করে yn সিনক্রোনাইজড কাস্টম বৈশিষ্ট্য।

... এবং আমি নিশ্চিত যে অন্যান্য ওএস এবং অ্যাপ্লিকেশন ফ্রেমওয়ার্কের জন্য অন্যরা।


2

আপনার কাছে 2 টি থ্রেড রয়েছে। থ্রেড এ এবং থ্রেড বি, আপনার অবজেক্ট সিও রয়েছে

এ বর্তমানে অবজেক্ট সি অ্যাক্সেস করছে এবং সেই বস্তুটিতে একটি লক রেখে দিয়েছে। বি অবজেক্ট সি অ্যাক্সেস করতে হবে, তবে এটি অবধি সি সিটিতে লকটি প্রকাশ না করা পর্যন্ত এটি করতে পারে না until


1

আর একটি শব্দ সম্মতি হতে পারে। এটি কেবল দুটি বা ততোধিক থ্রেডের একই উত্সটি ব্যবহার করার চেষ্টা করার ধারণা।


1

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


1

নিম্নলিখিত পরিস্থিতিতে কল্পনা করুন। আপনি আগামীকাল চূড়ান্ত পরীক্ষার জন্য প্রস্তুতি নিচ্ছেন এবং কিছুটা ক্ষুধার্ত বোধ করছেন। সুতরাং, আপনি আপনার ছোট ভাইকে দশ টাকা দিন এবং তাকে আপনার জন্য একটি পিজ্জা কিনতে বলুন। এই ক্ষেত্রে, আপনি মূল থ্রেড এবং আপনার ভাই হ'ল চাইল্ড থ্রেড। আপনার আদেশটি দেওয়া হয়ে গেলে, আপনি এবং আপনার ভাই উভয়ই তাদের কাজ এক সাথে করছেন (অর্থাত্, পিজ্জা পড়াশুনা এবং কেনা)। এখন, আমাদের দুটি বিষয় বিবেচনা করতে হবে। প্রথমে, আপনার ভাই আপনার পিজ্জা ফিরিয়ে আনেন এবং আপনি পড়াশোনা করার সময় শেষ করেন। এই ক্ষেত্রে, আপনি পড়াশোনা বন্ধ করতে পারেন এবং পিজ্জা উপভোগ করতে পারেন। দ্বিতীয়ত, আপনি পিজ্জা উপলভ্য হওয়ার আগে আপনি অধ্যয়ন শুরু করুন এবং ঘুমিয়ে যান (অর্থাত্, আজকের জন্য আপনার নির্ধারিত কাজ - আগামীকালের চূড়ান্ত পরীক্ষার জন্য পড়াশুনা - সম্পন্ন হয়েছে) available অবশ্যই আপনি ঘুমাতে পারবেন না; অন্যথায়, আপনি পিজ্জা খাওয়ার সুযোগ পাবেন না।

উদাহরণ হিসাবে, দুটি ক্ষেত্রে প্রতিদ্বন্দ্বিতা মানে।


0

থ্রেড কনটেন্টেশন I / O ক্রিয়াকলাপ দ্বারাও প্রভাবিত হয়। উদাহরণস্বরূপ যখন কোনও থ্রেড ফাইল পড়ার জন্য অপেক্ষা করে তখন এটি একটি বিতর্ক হিসাবে বিবেচনা করতে পারে। সমাধান হিসাবে I / O সমাপ্তি বন্দরগুলি ব্যবহার করুন।


0

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

ডটট্রেস ডকুমেন্টেশন থেকে

আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.