নেট থেকে লক করা নিয়ে আমি সতীর্থের সাথে আলোচনা করছিলাম। তিনি নিম্ন-স্তরের এবং উচ্চ-স্তরের উভয় প্রোগ্রামিংয়ের বিস্তৃত পটভূমির সাথে একটি সত্যই উজ্জ্বল লোক, তবে নিম্ন স্তরের প্রোগ্রামিংয়ের সাথে তাঁর অভিজ্ঞতা আমার চেয়ে অনেক বেশি। যাইহোক, তিনি যুক্তি দিয়েছিলেন যে "জম্বি থ্রেড" কোনও সিস্টেম বিধ্বস্ত হওয়ার স্বীকারোক্তিজনকভাবে ছোট সম্ভাবনা এড়াতে যদি সম্ভব হয় তবে সমস্ত ক্ষেত্রে যদি ভারী-বোঝার অধীনে থাকা প্রত্যাশিত সমালোচনামূলক সিস্টেমগুলিতে নেট লকিং এড়ানো উচিত। আমি নিয়মিত লকিং ব্যবহার করি এবং "জম্বি থ্রেড" কী তা আমি জানতাম না, তাই জিজ্ঞাসা করেছি। তার ব্যাখ্যা থেকে আমি যে ধারণা পেয়েছি তা হ'ল একটি জম্বি থ্রেড একটি থ্রেড যা সমাপ্ত হয়েছে তবে এখনও কিছু সংস্থান থেকে কিছু সংস্থান রয়েছে। একটি উদাহরণস্বরূপ যে একটি জম্বি থ্রেড কোনও সিস্টেমকে ভেঙে ফেলতে পারে তার একটি উদাহরণ তিনি দিয়েছিলেন যে কোনও থ্রেডটি কোনও বস্তুতে লক হওয়ার পরে কিছু প্রক্রিয়া শুরু করে, এবং তারপরে লকটি প্রকাশের আগে কিছুটা সমাপ্ত হয়। এই পরিস্থিতিতে সিস্টেমটি ক্র্যাশ হওয়ার সম্ভাবনা রয়েছে, কারণ শেষ পর্যন্ত, সেই পদ্ধতিটি কার্যকর করার চেষ্টা করার ফলে থ্রেডগুলি সমস্ত বস্তুর অ্যাক্সেসের জন্য অপেক্ষা করবে যা কখনই ফিরে আসবে না, কারণ লকড অবজেক্টটি ব্যবহার করা থ্রেডটি মারা গেছে।
আমি মনে করি এটির মূল বক্তব্য আমি পেয়েছি তবে আমি যদি বেস থেকে বাইরে যাই তবে দয়া করে আমাকে জানান। ধারণাটি আমার কাছে বোধগম্য হয়েছিল। আমি পুরোপুরি নিশ্চিত হইনি যে এটি নেট আসরে ঘটতে পারে এমন বাস্তব দৃশ্য। আমি এর আগে কখনও "জম্বিগুলি" শুনিনি, তবে আমি বুঝতে পারি যে প্রোগ্রামাররা যারা নিম্ন স্তরে গভীরতার সাথে কাজ করেছেন তাদের কম্পিউটিং ফান্ডামেন্টালগুলির (যেমন থ্রেডিংয়ের মতো) গভীর ধারণা রয়েছে। আমি অবশ্যই লকিংয়ের মানটি দেখতে পাচ্ছি, এবং আমি অনেক বিশ্বমানের প্রোগ্রামারদের লিভারেজ লকিং দেখেছি। আমার নিজের জন্য এটি মূল্যায়নেরও সীমিত ক্ষমতা আছে কারণ আমি জানি যে lock(obj)
বিবৃতিটি কেবলমাত্র সিনট্যাকটিক চিনির জন্য:
bool lockWasTaken = false;
var temp = obj;
try { Monitor.Enter(temp, ref lockWasTaken); { body } }
finally { if (lockWasTaken) Monitor.Exit(temp); }
এবং কারণ Monitor.Enter
এবং Monitor.Exit
চিহ্নিত করা হয় extern
। এটা অনুমেয় বলে মনে হয় যে .NET এমন একধরণের প্রক্রিয়াকরণ করে যা থ্রেডগুলি সিস্টেম উপাদানগুলির সংস্পর্শ থেকে রক্ষা করে যা এই ধরণের প্রভাব ফেলতে পারে, তবে এটি নিখুঁত অনুমানমূলক এবং সম্ভবত কেবল "জম্বি থ্রেড" এর কথা কখনও শুনিনি বলে ভিত্তি করে based আগে. সুতরাং, আমি আশা করছি আমি এখানে এ সম্পর্কে কিছু প্রতিক্রিয়া পেতে পারি:
- আমি এখানে যা ব্যাখ্যা করেছি তার চেয়ে কি "জম্বি থ্রেড" এর একটি পরিষ্কার সংজ্ঞা আছে?
- জম্বি থ্রেডগুলি .NET এ ঘটতে পারে? (কেন কেন না?)
- প্রযোজ্য হলে, NET- এ আমি কীভাবে জম্বি থ্রেড তৈরি করতে বাধ্য করতে পারি?
- যদি প্রযোজ্য হয়, NET- তে জম্বি থ্রেড দৃশ্যের ঝুঁকি না নিয়ে আমি কীভাবে লকিংয়ের সুবিধা অর্জন করতে পারি?
হালনাগাদ
এই প্রশ্নটি আমি দু'বছর আগে জিজ্ঞাসা করেছি। আজ এই ঘটেছে:
wait
বা waitpid
। শিশু প্রক্রিয়াটিকে তখন "জম্বি প্রক্রিয়া" বলা হয়। আরও দেখুন howtogeek.com/119815