প্রক্রিয়াগুলিকে অগ্রাধিকার দেওয়া কেন গতি উন্নতি করে না?


18

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

কেন? আরও কি চলছে বা আরও কিছু করার দরকার আছে?


6
এটি বাস্তব জীবনের মতো। আপনার যদি অন্য যাত্রীর চেয়ে বিমানের উপরে উঠার উচ্চ অগ্রাধিকার থাকে তবে এর অর্থ এই নয় যে ফ্লাইটটি আপনার জন্য কম সময় নেবে!
মেহরদাদ

উত্তর:


28

বাধা যখন সিপিইউ হয় তখন অগ্রাধিকার সাহায্য করে না। অপারেটিং সিস্টেমটি নির্ধারিত সময়সূচী অ্যালগরিদমকে আসলে অগ্রাধিকার দেয় যা প্রতিটি প্রক্রিয়া অবিচ্ছিন্নভাবে চালিত করার জন্য বেশিরভাগ সিস্টেমে পর্যাপ্ত প্রসেসর নেই বলে নির্ধারণের জন্য অপারেটিং সিস্টেমটি নির্ধারিত সময়সূচী অ্যালগরিদমকে প্রভাবিত করে।

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


5
অগ্রাধিকার সাহায্য করে যখন বাধা খুব বেশি থ্রেড যা চালানো যায়। উইন্ডোজের উচ্চ-অগ্রাধিকারের থ্রেডগুলি যা তাদের টাইমলাইস শেষে চালিত হয় তারা নিম্ন-অগ্রাধিকারের থ্রেডের পক্ষে অগ্রাধিকারে চালানোর জন্য আরেকটি সুযোগ পাবে (উইন্ডোজ নিম্ন-অগ্রাধিকারের থ্রেড না খেয়ে দেখার চেষ্টা করে এবং মাঝে মাঝে সেগুলি উত্সাহ দেয়)। I / O এর জন্য অপেক্ষা করা থ্রেডগুলিতে অগ্রাধিকারের সামান্য প্রভাব রয়েছে - উইন্ডোজ সাময়িকভাবে I / O সমাপ্ত হওয়ার পরে থ্রেডের অগ্রাধিকারটি বৃদ্ধি করে, এটি যে I / O এর জন্য অপেক্ষা করছিল তার উপর নির্ভর করে।
মাইক ডিমমিক

4

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


3

যখন উপলব্ধ সিপিইউ কোরগুলির চেয়ে বেশি চলমান থ্রেড থাকে তখন অগ্রাধিকার কেবল তার জন্য গুরুত্বপূর্ণ। এটি যখন ঘটে তখন অগ্রাধিকারগুলি নিয়ন্ত্রণ করে যে কোন থ্রেড চালানো হবে। বেশিরভাগ সিস্টেমে সিপিইউতে কোনও বিতর্ক করার জন্য পর্যাপ্ত পরিমাণে গণনা হয় না: থ্রেডগুলি সমস্ত অবরুদ্ধ থাকে , কিছু হওয়ার জন্য অপেক্ষা করে। এটি আপনার জন্য কিছু টাইপ করার, মাউসটি সরিয়ে নেওয়ার, স্ক্রিনটি স্পর্শ করার জন্য বা ডিস্ক, নেটওয়ার্ক, আপনি যে প্লাগ ইন করা কিছু অন্যান্য ডিভাইস থেকে বা অন্য কোনও থ্রেডের সমালোচনামূলক ডেটাতে কাজ শেষ করার অপেক্ষায় থাকতে পারে কাঠামো। এটি সম্ভবত ডিস্ক থেকে পড়ার জন্য প্রোগ্রামটির কিছু অংশের জন্য অপেক্ষা করছে বা কোনও মেমরি যা স্বতঃস্ফূর্তভাবে কোনও ফাইল পড়ার পরিবর্তে আবার পড়তে হবে app

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

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

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

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

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


0

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

অন্যান্য সম্ভাব্য সমস্যা:

  • প্রোগ্রামটি অদক্ষ / খারাপভাবে লেখা হতে পারে
  • "ধীর" ডিস্ক অ্যাক্সেস বা একটি ধীর নেটওয়ার্কের কারণে এটি ধীর হয়ে যেতে পারে

0

এমনকি I / O- বাউন্ড প্রক্রিয়াটির I / O অগ্রাধিকার বাড়ানো অগত্যা এটি দ্রুত চালিত হওয়ার কারণ হবে না। উদাহরণস্বরূপ, যদি এটি কোনও পৃথক, সম্ভবত দূরবর্তী, প্রক্রিয়া দ্বারা উত্পাদিত ডেটার ভোক্তা হয় এবং এটি যে উত্সটি ডেটা উত্পাদন করে তার সাথে সামঞ্জস্য করে তবে তা দ্রুত যেতে পারে না বা উচ্চতর থ্রুটপুটও পেতে পারে না।

বর্তমানে গৃহীত উত্তরের প্রথম বাক্যে ( /superuser//a/752587/322588 ) স্পষ্টভাবে যা বলা হয়েছে তার বিপরীতে , সিপিইউ যখন বাধা হয় তখন অগ্রাধিকার পরিবর্তনগুলি সবচেয়ে কার্যকর হয়, যেমনটি মাইক ডিমমিকের উত্তরে ব্যাখ্যা করা হয়েছে ( /superuser//a/752864/322588 )। তদ্ব্যতীত, গৃহীত উত্তরের দ্বিতীয় অনুচ্ছেদে বিবৃতি, "যদি আপনার প্রক্রিয়াটি পুরো টাইমলাইসটি অবসান করে তবে এটি প্রকৃত গণনাতে বরাদ্দ করা হয় তবে তফসিলের ফলে সেখানে কোনও পরিবর্তন হবে না" সম্পূর্ণরূপে ভুল যদি না প্রক্রিয়াটি ইতিমধ্যে সকলের সর্বোচ্চ অগ্রাধিকার না থাকে এটি যখনই চালানোর জন্য অপেক্ষা করে তখন চলমান থ্রেড। এটি কারণ অন্যান্য সমস্ত পরিস্থিতিতে, অগ্রাধিকার বাড়ানো সম্ভবত প্রাচীর-ঘড়ির ব্যবধানে এটি আরও বার বার পেতে পারে।

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

দাবি অস্বীকার: আমি মিঃ ডিমমিককে চিনি না, যদিও আমি বলতে পারি যে তিনি কী লিখছেন তা তিনি জানেন।


সম্ভবত আপনি ভুল বুঝেছেন; প্রশ্ন প্রসেস সম্পর্কে ছিল চলমান দ্রুততর। সিপিইউ-বাউন্ড প্রক্রিয়াগুলি তাদের পুরো শিডিয়ুলিং ইউনিট (কোয়ান্টাম) নিঃশেষ করবে এবং তারপরে শেষে প্রস্তুত প্রক্রিয়াগুলির একটি সারিতে যাবে। উইন্ডোজের মতো একটি ডেস্কটপ অপারেটিং সিস্টেমে, এর অর্থ এই প্রক্রিয়াটির প্রতি সেকেন্ডে চালানোর 1 / কোয়ান্টাম-হার্জ সম্ভাবনা রয়েছে। অগ্রাধিকার (সাধারণত) পরিবর্তন করা এর টাইমলাইকের দৈর্ঘ্য পরিবর্তন করে না। এটি সর্বদা একই সংখ্যার শিডিয়ুলিং কোয়ান্টাটি সম্পূর্ণ করতে সময় নেবে। গুরুতরভাবে , উইন্ডোজ আসলে প্রক্রিয়া রানটাইম পরিমাপ করে: কোয়ান্টা নির্ধারিত।
অ্যান্ডন এম। কোলেম্যান

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

অপেক্ষমান আই / ও বাউন্ড প্রক্রিয়াটির উপর অগ্রাধিকার মৌলিকভাবে পৃথক এবং এটি উইন্ডোজটিতে রিপোর্ট করা রানটাইমের উপর একটি পরিমাপযোগ্য প্রভাব ফেলতে পারে। আবার, উইন্ডোজ রানটাইম পরিমাপের পরিমাণের কোয়ান্টা সংখ্যা হিসাবে নির্ধারণ করে (এমনকি যদি কোনও প্রক্রিয়া 10 এমএসের কোয়ান্টামের মধ্যে 1 এমএস ব্যয় করে তবে স্বেচ্ছায় I / O এর জন্য বাকি 9 এমএস অপেক্ষা করে, উইন্ডোজ কার্নেল গণনা করে যে 10 এমএস মূল্য হিসাবে ব্যবহারকারী-মোড রানটাইমের)। প্রিম্পশন আই / ও বাউন্ড অ্যাপ্লিকেশনগুলি কম কোয়ান্টা শেষ করতে সহায়তা করতে পারে। অন্যান্য কার্নেলগুলি (যেমন লিনাক্স) কোনও প্রক্রিয়াটির রানটাইমে আংশিক কোয়ান্টাকে সঠিকভাবে পরিমাপ করতে পারে, তবে উইন্ডোজ তা পারবে না।
অ্যান্ডন এম। কোলেম্যান

@ অ্যান্ডোন.কোলেম্যান ভিস্তার হিসাবে এবং পরে, হ্যাঁ, এটি পারে এবং করতে পারে।
জেমি হানরাহান

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