সেরা অনুশীলনটি পোল করা নয় ... তবে কোনও থ্রেড কল অপেক্ষা করলে ()?


13

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

তবে পোলিং কি অভ্যন্তরীণভাবে নিম্ন স্তরে ঘটছে না? উদাহরণস্বরূপ, যদি আমরা থ্রেডটি অপেক্ষা করি () অন্য থ্রেডটি কখন শেষ হয়েছে তা পরীক্ষা করার জন্য কী কর্নাল এখনও পোলিং করছে না যাতে এটি প্রথম থ্রেডকে অবহিত করতে পারে?

আমার ধারণা আমি এখানে কোনও কিছু মিস করছি, কেউ আমাকে আলোকিত করতে পারে?

উত্তর:


28

অপারেটিং সিস্টেমটি এই জাতীয় আন্তঃসম্পর্কীয় যোগাযোগের জন্য নির্দিষ্ট কিছু প্রাথমিক সরবরাহ করে যার জন্য ভোটদানের প্রয়োজন হয় না।

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


সুতরাং কোনও উপায়ে এটি ওএস স্তরেই পোলিং হচ্ছে?
tgkprog

7
না @tgkprog, এটি পোলিং নয়, কারণ ওএস বা অন্য কোনও প্রক্রিয়া মিউটেক্স প্রকাশ না করা পর্যন্ত অপেক্ষার প্রক্রিয়াটি নির্ধারিত নয়। কোনও ভোটগ্রহণ প্রক্রিয়া সিপিইউ শিডিয়ুলিংয়ের প্রতিযোগিতা অবিরত করবে যাতে এটি অপেক্ষা করা বন্ধ হয় কিনা তা পরীক্ষা করে। এই ধরণের পোলিং প্রক্রিয়াটি অপেক্ষা করার সময় সিপিইউয়ের বেশিরভাগ অংশ পোড়াতে পারে।
জোশপ

আমি ওএস প্রক্রিয়াটি মিউটেক্সের স্থিতি পোলিংয়ের অর্থ। যদিও আমি নিশ্চিত যে এটি আমরা করতে পারি তার চেয়ে অপ্টিমাইজড এবং ভাল। সম্ভবত শিডিয়ুলারের অংশ হিসাবে চলে।
tgkprog

4
@tgkprog: অপারেটিং সিস্টেমটি প্রক্রিয়াটি প্রকাশ না করে বা সমাপ্ত না হওয়া অবধি মুটেেক্সের সাথে কী চলছে তাতে ওএস কিছুটা মনোযোগ দেয় না। এই ইভেন্টগুলির যে কোনও একটি অপেক্ষার তালিকায় প্রথমে যে কোনও প্রক্রিয়া ওএসকে মিটেক্স লকটি হস্তান্তরিত করবে এবং সেই প্রক্রিয়াটি রান্নেবল হিসাবে চিহ্নিত করবে। কোনও ভোটগ্রহণ জড়িত নেই, কেবল একটি ইভেন্টের প্রতিক্রিয়া। জোশপ যা বলেছিল তা রেফারেন্স সহ অন্তর্ভুক্ত। :-)
blrfl

2
@ সিএসএস: অনেক বেশি। প্রক্রিয়াগুলি স্বেচ্ছায় সমাপ্ত হতে পারে (যেমন, _exit(2)পসআইএক্স-ওয়াই সিস্টেমগুলিতে কল করা) বা স্বেচ্ছায় (যেমন, বিভাজন দ্বারা শূন্যের মতো একটি ত্রুটি একটি বাধা বা অন্য কোনও কল উত্পন্ন করে kill(2))। উভয় ক্ষেত্রেই, নিয়ন্ত্রণটি স্পষ্টভাবে ওএসের কাছে ফিরিয়ে দেওয়া হয়, যা জানে যে কী প্রক্রিয়া চলছে বা হত্যা করা হবে। কোনও প্রক্রিয়া শেষ করার কাজটিতে এর সংস্থানগুলি মুক্ত করা অন্তর্ভুক্ত রয়েছে, মিটেক্সগুলি অন্তর্ভুক্ত রয়েছে। যদি এখন মৃত প্রক্রিয়াটির দ্বারা কোনও মিটেক্স রাখা হয়, তবে ওএস এটি ছেড়ে দেবে। প্রক্রিয়াটি যদি মিটেক্সের অপেক্ষার তালিকায় থাকে তবে এটি সরানো হবে।
blrfl
আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.