কেউ দয়া করে ব্যাখ্যা করতে পারেন যে থ্রেডের যুক্তি কী?
আমি এটি গুগল করেছি, তবে এর সহজ ব্যাখ্যা খুঁজে পাচ্ছি না।
কেউ দয়া করে ব্যাখ্যা করতে পারেন যে থ্রেডের যুক্তি কী?
আমি এটি গুগল করেছি, তবে এর সহজ ব্যাখ্যা খুঁজে পাচ্ছি না।
উত্তর:
মূলত থ্রেড কনটেন্টেশন এমন একটি অবস্থা যেখানে বর্তমানে একটি থ্রেড লক / অবজেক্টের জন্য অপেক্ষা করছে যা বর্তমানে অন্য থ্রেডের দ্বারা অধিষ্ঠিত রয়েছে। সুতরাং, অন্য থ্রেড যে নির্দিষ্ট অবজেক্টটিকে আনলক না করে এই অপেক্ষার থ্রেডটি সেই অবজেক্টটি ব্যবহার করতে পারে না।
বেশ কয়েকটি উত্তর লক যুক্তিতে মনোনিবেশ করেছে বলে মনে হয় তবে লকগুলি কেবলমাত্র এমন সংস্থান নয় যেগুলির উপর বিতর্কটি অভিজ্ঞ হতে পারে। বিতর্কটি কেবল তখন হয় যখন দুটি থ্রেড একই উত্স বা সম্পর্কিত উত্সগুলিকে এমনভাবে অ্যাক্সেস করার চেষ্টা করে যে অন্য থ্রেড (গুলি) চলমান না থাকলে কমপক্ষে প্রতিযোগিতামূলক থ্রেডগুলির চেয়ে ধীরে ধীরে চলতে থাকে।
বিতর্কের সর্বাধিক সুস্পষ্ট উদাহরণ হ'ল লকটিতে। যদি থ্রেড এ এর একটি লক থাকে এবং থ্রেড বি একই লকটি অর্জন করতে চায় তবে থ্রেড বি থ্রেড এ লকটি প্রকাশ না হওয়া পর্যন্ত অপেক্ষা করতে হবে।
এখন, এটি প্ল্যাটফর্ম-নির্দিষ্ট, তবে অন্য থ্রেডটি লকটি প্রকাশের জন্য অপেক্ষা না করা সত্ত্বেও থ্রেডটি ধীরগতিতে পড়তে পারে! এটি কারণ একটি লক কিছু ধরণের ডেটা রক্ষা করে এবং ডেটা নিজেই প্রায়শই বিতর্কিত হয়।
উদাহরণস্বরূপ, একটি থ্রেড বিবেচনা করুন যা কোনও লক অর্জন করে, কোনও জিনিসকে সংশোধন করে, তারপরে লকটি প্রকাশ করে এবং অন্যান্য কিছু কাজ করে। যদি দুটি থ্রেড এটি করে থাকে তবে তারা লকের জন্য লড়াই না করলেও থ্রেডগুলি কেবল একটি থ্রেড চলমান থাকলে তারা তার চেয়ে অনেক ধীর গতিতে চলতে পারে।
কেন? বলুন যে প্রতিটি থ্রেড তার নিজস্ব কোরটিতে একটি আধুনিক x86 সিপিইউতে চলছে এবং কোরগুলি একটি এল 2 ক্যাশে ভাগ করে না। মাত্র একটি থ্রেডের সাহায্যে অবজেক্টটি বেশিরভাগ সময় এল 2 ক্যাশে থাকতে পারে। উভয় থ্রেড চলমান রয়েছে, প্রতিবার একটি থ্রেড বস্তুটি সংশোধন করে, অন্য থ্রেডটি দেখতে পাবে যে ডেটাটি তার L2 ক্যাশে নেই কারণ অন্য সিপিইউ ক্যাশে লাইনটি অবৈধ করেছে। একটি পেন্টিয়াম ডি তে, উদাহরণস্বরূপ, এটি কোডটি এফএসবি গতিতে চালিত করবে, যা এল 2 ক্যাশে গতির চেয়ে অনেক কম less
যেহেতু লকটি নিজেই যুক্তিযুক্ত না হয়েও বিতর্ক হতে পারে, তাই লক না থাকলেও বিতর্ক হতে পারে। উদাহরণস্বরূপ, বলুন আপনার সিপিইউ 32-বিট ভেরিয়েবলের পারমাণবিক বৃদ্ধি সমর্থন করে। যদি একটি থ্রেড একটি ভেরিয়েবলকে বৃদ্ধি এবং হ্রাস করে রাখে তবে চলকটি বেশিরভাগ সময় ক্যাশে গরম থাকবে। যদি দুটি থ্রেড এটি করে, তাদের ক্যাশে সেই পরিবর্তনশীল ধারণ করে থাকা মেমরির মালিকানার পক্ষে লড়াই করবে এবং ক্যাশে লাইনটির প্রতিটি মূল মালিকানা সুরক্ষার জন্য ক্যাশে সুসংহততা প্রোটোকল পরিচালিত হওয়ায় অনেকগুলি অ্যাক্সেস ধীর হবে।
হাস্যকরভাবে, লকগুলি সাধারণত বিতর্ক হ্রাস করে। কেন? কোনও লক ছাড়াই, দুটি থ্রেড একই বস্তু বা সংগ্রহের উপর পরিচালনা করতে পারে এবং প্রচুর বিতর্ক সৃষ্টি করতে পারে (উদাহরণস্বরূপ, লক মুক্ত সারি রয়েছে)। লকগুলি অদলবদলকারী থ্রেডগুলি পরিবর্তে চালিত করার জন্য, বিতর্কিত থ্রেডগুলি আলাদা করার প্রবণতা করবে। থ্রেড এ যদি একটি লক ধরে থাকে এবং থ্রেড বি একই লকটি চায়, তবে প্রয়োগকৃত পরিবর্তে থ্রেড সি চালাতে পারে। থ্রেড সিতে যদি সেই লকটির প্রয়োজন হয় না, তবে থ্রেড এ এবং বি এর মধ্যে ভবিষ্যতের লড়াইটি কিছু সময়ের জন্য এড়ানো যায়। (অবশ্যই, এটি ধরে নিয়েছে যে অন্যান্য থ্রেডগুলি চলতে পারে It এটি সামগ্রিকভাবে কার্যকরভাবে অগ্রগতি করতে পারে এমন একমাত্র উপায় যদি লড়াইয়ের থ্রেডগুলি চালানো না হয়))
থেকে এখানে :
একটি তর্ক তখনই ঘটে যখন থ্রেড এমন কোনও সংস্থার জন্য অপেক্ষা করে যা সহজেই পাওয়া যায় না; এটি আপনার কোডটির কার্যকরকরণকে ধীর করে দেয়, তবে সময়ের সাথে সাথে এটি পরিষ্কার করতে পারে।
যখন একটি থ্রেড দ্বিতীয় থ্রেড লক হয়ে আছে এমন সংস্থানটির জন্য অপেক্ষা করছে এবং দ্বিতীয় থ্রেডটি প্রথম থ্রেডটি লক হয়ে আছে এমন সংস্থানটির জন্য অপেক্ষা করছে A অচলাবস্থায় দুটিরও বেশি থ্রেড জড়িত থাকতে পারে। একটি অচলাবস্থা কখনও নিজেকে সমাধান করে না। এটি প্রায়শই পুরো অ্যাপ্লিকেশন, বা যে অংশটি অচলাবস্থার সম্মুখীন হয় তা বন্ধ করে দেয়।
আমি মনে করি প্রশ্নের পটভূমিতে ওপি থেকে কিছু স্পষ্ট হওয়া উচিত - আমি ২ টি উত্তর সম্পর্কে ভাবতে পারি (যদিও আমি নিশ্চিত যে এই তালিকার সংযোজন রয়েছে):
যদি আপনি থ্রেড বিবাদের সাধারণ "ধারণা" উল্লেখ করছেন এবং এটি কীভাবে কোনও অ্যাপ্লিকেশনে নিজেকে উপস্থাপন করতে পারে তবে আমি উপরে @ ডেভিডসওয়ার্টজের বিস্তারিত উত্তরটি স্থগিত করছি।
এখানে '.NET সিএলআর লক্স এবং থ্রেডস: মোট # বিতর্ক রয়েছে' পারফরম্যান্স কাউন্টার। এই কাউন্টারটির জন্য পারফমোন বর্ণনা থেকে নেওয়া হিসাবে এটি সংজ্ঞায়িত করা হয়েছে:
এই কাউন্টারে সিএলআর-এর থ্রেডগুলির মোট সংখ্যাটি প্রদর্শিতভাবে ব্যর্থভাবে একটি পরিচালিত লক অর্জনের চেষ্টা করে। পরিচালিত লকগুলি বিভিন্ন উপায়ে অর্জিত হতে পারে; সি # তে "লক" বিবৃতি দ্বারা বা System.Monitor.Enter কল করে বা মেথোডিম্পল্পশনগুলি ব্যবহার করে yn সিনক্রোনাইজড কাস্টম বৈশিষ্ট্য।
... এবং আমি নিশ্চিত যে অন্যান্য ওএস এবং অ্যাপ্লিকেশন ফ্রেমওয়ার্কের জন্য অন্যরা।
আর একটি শব্দ সম্মতি হতে পারে। এটি কেবল দুটি বা ততোধিক থ্রেডের একই উত্সটি ব্যবহার করার চেষ্টা করার ধারণা।
নিম্নলিখিত পরিস্থিতিতে কল্পনা করুন। আপনি আগামীকাল চূড়ান্ত পরীক্ষার জন্য প্রস্তুতি নিচ্ছেন এবং কিছুটা ক্ষুধার্ত বোধ করছেন। সুতরাং, আপনি আপনার ছোট ভাইকে দশ টাকা দিন এবং তাকে আপনার জন্য একটি পিজ্জা কিনতে বলুন। এই ক্ষেত্রে, আপনি মূল থ্রেড এবং আপনার ভাই হ'ল চাইল্ড থ্রেড। আপনার আদেশটি দেওয়া হয়ে গেলে, আপনি এবং আপনার ভাই উভয়ই তাদের কাজ এক সাথে করছেন (অর্থাত্, পিজ্জা পড়াশুনা এবং কেনা)। এখন, আমাদের দুটি বিষয় বিবেচনা করতে হবে। প্রথমে, আপনার ভাই আপনার পিজ্জা ফিরিয়ে আনেন এবং আপনি পড়াশোনা করার সময় শেষ করেন। এই ক্ষেত্রে, আপনি পড়াশোনা বন্ধ করতে পারেন এবং পিজ্জা উপভোগ করতে পারেন। দ্বিতীয়ত, আপনি পিজ্জা উপলভ্য হওয়ার আগে আপনি অধ্যয়ন শুরু করুন এবং ঘুমিয়ে যান (অর্থাত্, আজকের জন্য আপনার নির্ধারিত কাজ - আগামীকালের চূড়ান্ত পরীক্ষার জন্য পড়াশুনা - সম্পন্ন হয়েছে) available অবশ্যই আপনি ঘুমাতে পারবেন না; অন্যথায়, আপনি পিজ্জা খাওয়ার সুযোগ পাবেন না।
উদাহরণ হিসাবে, দুটি ক্ষেত্রে প্রতিদ্বন্দ্বিতা মানে।
ইতিমধ্যে অন্য থ্রেড * দ্বারা অর্জিত যে কোনও বস্তুর কাছে কোনও থ্রেড লকটি অর্জন করার চেষ্টা করে তখন লক কনটেন্ট হয়। অবজেক্টটি প্রকাশ না হওয়া অবধি থ্রেডটি অবরুদ্ধ করা হবে (অন্য কথায় এটি অপেক্ষার অবস্থায় রয়েছে)। কিছু ক্ষেত্রে, এটি তথাকথিত সিরিয়াল কার্যকর হতে পারে যা নেতিবাচকভাবে প্রয়োগকে প্রভাবিত করে।
ডটট্রেস ডকুমেন্টেশন থেকে