কেন বেশি থ্রেড ব্যবহার করা কম থ্রেড ব্যবহারের চেয়ে ধীর করে তোলে


30

8 টি থ্রেড ব্যবহার করে এক্স এক্স চালানোর চেষ্টা করা হয়েছিল এবং এটি n মিনিটের মধ্যে শেষ হয়েছিল । 50 টি থ্রেড
ব্যবহার করে একই প্রোগ্রামটি চালানোর চেষ্টা করা হয়েছিল এবং এটি এন * 10 মিনিটে শেষ হয়েছিল

কেন এটি ঘটে এবং আমি কীভাবে সর্বোত্তম সংখ্যক থ্রেড ব্যবহার করতে পারি?

উত্তর:


33

এটি একটি জটিল প্রশ্ন যা আপনি জিজ্ঞাসা করছেন। আপনার থ্রেডগুলির প্রকৃতি সম্পর্কে আরও না জেনে বলা মুশকিল। সিস্টেমের কার্যকারিতা নির্ণয়ের সময় কিছু বিষয় বিবেচনা করতে হবে:

প্রক্রিয়া / থ্রেড হয়

  • সিপিইউ আবদ্ধ (সিপিইউ প্রচুর সংস্থান প্রয়োজন)
  • মেমোরি আবদ্ধ (র‌্যামের প্রচুর সংস্থান প্রয়োজন)
  • I / O আবদ্ধ (নেটওয়ার্ক এবং / অথবা হার্ড ড্রাইভ সংস্থানসমূহ)

এই তিনটি সংস্থানই সীমাবদ্ধ এবং যে কোনও একটি সিস্টেমের কার্যকারিতা সীমাবদ্ধ করতে পারে। আপনার নির্দিষ্ট পরিস্থিতি গ্রাস করছে কোনটি (আপনার পক্ষে 2 বা 3 একসাথে হতে পারে) তা দেখতে হবে।

আপনি কী এবং যা চলছে তা নির্ধারণ করতে ntopএবং ব্যবহার করতে পারেন ।iostatvmstat


8
হার্ডওয়্যারটিও গুরুত্বপূর্ণ। শারীরিক, ভার্চুয়াল, কোর সংখ্যা, কোর ধরন, এটি L1 / ও L2 / L3 ক্যাশে, চিহ্নিত, ইত্যাদি
EightBitTony

46

"কেন এমন হয়?" উত্তর এক ধরণের সহজ। ভাবুন আপনার একটি করিডোর রয়েছে যা আপনি পাশাপাশি চারজনকে ফিট করতে পারবেন। আপনি সমস্ত আবর্জনা এক প্রান্তে, অন্য প্রান্তে সরাতে চান। সবচেয়ে দক্ষ লোক হ'ল ৪ জন।

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

সুতরাং আপনি কোনও সারি তৈরির কারণ ছাড়াই আপনার যতটা লোক ফিট হতে পারেন তা রাখতে চান। আপনার সারি কেন (বা বাধা) স্ল্যামের উত্তরের প্রশ্নের উপর নির্ভর করে।


1
আপনার উদাহরণ বিভ্রান্তিকর। এরকম কিছু বলা ভাল: "আপনার একটি করিডোর রয়েছে যা আপনি পাশাপাশি চারজনকে ফিট করতে পারেন এবং এটি আপনার এবং অন্যান্য ব্যক্তিরা বিভিন্ন কাজে ব্যবহার করেন There এখানে একটি রেফারি রয়েছে যে এই সিদ্ধান্ত নেয় যে করিডোরটি দিয়ে কে যেতে পারে? "তারপরে আপনার সর্বাধিক দক্ষ সংখ্যা 4 এর চেয়ে বড় এবং কিছু সংখ্যার চেয়ে কম, যেখানে আপনার লোকেরা [অত্যন্ত প্রসঙ্গে নির্ভরশীল] সারি শুরু করে।" সাধারণত সিপিইউ সংখ্যার চেয়ে কিছু থ্রেড থাকা ঠিক 4 টি থ্রেড ব্যবহার করার চেয়ে ভাল সম্পাদন করে । আপনি যদি কেবল সিপিইউ ব্যবহার করেন 4তবে সেরা নম্বরটি।
বাকুরিউ

7
দুর্দান্ত উদাহরণ, +1। বাকুরিউ, এটির একটি উদাহরণ যা সীমিত শেয়ার্ড রিসোর্সের সমস্যা চিত্রিত করে। এটি সমস্যার ব্যাখ্যা দিচ্ছে, কীভাবে থ্রেডগুলির সর্বোত্তম সংখ্যাটি সন্ধান করতে হবে না।
বনাঙ্গুইন

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

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

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

20

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

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


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

9

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

তবে স্পষ্টতই আরও থ্রেড নিক্ষেপ করলে বিষয়গুলি আরও খারাপ হতে পারে।

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

Amdahl আইন বিন্দু কোনও প্রোগ্রাম (যে কোন অ্যালগোরিদমের মধ্যে) এ সবসময় শতকরা যে যে করা যাবে না সমান্তরাল চালানো ( অনুক্রমিক অংশ ) এবং সেখানে অন্য একটি শতকরা হারের যে যাবে সমান্তরাল চালানো ( সমান্তরাল অংশ ) [একথাও ঠিক যে এই দুটি অংশ 100% পর্যন্ত যোগ করে]

এই অংশগুলি কার্যকর করার সময়ের শতাংশ হিসাবে প্রকাশ করা যেতে পারে। উদাহরণস্বরূপ, কঠোরভাবে ক্রমক্রমিক ক্রিয়াকলাপগুলিতে 25% সময় ব্যয় করা যেতে পারে এবং অবশিষ্ট 75% সময় অপারেশনে ব্যয় হয় যা সমান্তরালভাবে কার্যকর করা যায়।

উইকিপিডিয়া থেকে চিত্র ( উইকিপিডিয়া থেকে চিত্র )

আমদাহের আইন পূর্বাভাস দিয়েছে যে কোনও প্রোগ্রামের প্রতিটি প্রদত্ত সমান্তরাল অংশের (উদাহরণস্বরূপ 75%) আপনি কেবলমাত্র এ পর্যন্ত কার্যকরকরণের গতি বাড়িয়ে দিতে পারবেন (উদাহরণস্বরূপ সর্বাধিক 4 বার) এমনকি আপনি কাজটি করার জন্য আরও বেশি প্রসেসর ব্যবহার করেন।

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

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

এই তাত্ত্বিক ভবিষ্যদ্বাণী (প্রায় সিপিইউ সময়) অন্যকে ব্যবহারিক বাধা হিসাবে বিবেচনা করে না

  1. সীমাবদ্ধ I / O গতি (হার্ড ডিস্ক এবং নেটওয়ার্ক "গতি")
  2. মেমরি আকার সীমা
  3. অন্যরা

এটি ব্যবহারিক প্রয়োগগুলির ক্ষেত্রে সীমাবদ্ধ ফ্যাক্টর হতে পারে।


এটি অবশ্যই উত্তর নির্বাচন করা উচিত।
Eonil

6

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

আপনার ক্ষেত্রে, যখন 50 টি থ্রেড রয়েছে কেবল 10 টি থ্রেডের সাথে তুলনা করা হলে প্রচুর প্রসঙ্গের স্যুইচিং হয়।

প্রসঙ্গের স্যুইচিংয়ের কারণে এবার ওভারহেডটি প্রবর্তিত কারণ এটিই আপনার প্রোগ্রামকে ধীরগতিতে চালিত করে


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

থ্রেড প্রসঙ্গটি স্যুইচিংয়ে এবং নিজেই , যদি না আমরা প্রচুর পরিমাণে প্রসঙ্গের স্যুইচগুলির সাথে কাজ করে থাকি তবে সম্ভবত কার্য সম্পাদনের উপর কোনও অর্ডার অফ-মাত্রার প্রভাব পড়বে না। 50 টি থ্রেড উচ্চ তবে চরম নয় (এখনই আমার বাক্সে, ps ax | wc -l225 টি প্রক্রিয়া রিপোর্ট করে এবং এটি কোনওভাবেই ভারী বোঝা হয় না)। আমি @ আটবিটটোনির অনুমানের সাথে যেতে আগ্রহী; ক্যাশে অবৈধতা সম্ভবত একটি বড় ইস্যু, কারণ প্রত্যেক সময় আপনি কি ক্যাশে ফ্লাশ তবে CPU অপেক্ষা করতে হয়েছে eons র্যাম থেকে কোড এবং তথ্য জন্য।
একটি সিভিএন

3

আটবিটটোনির রূপক ঠিক করতে:

"কেন এমন হয়?" উত্তর এক ধরণের সহজ। ভাবুন আপনার কাছে দুটি সুইমিং পুল রয়েছে, একটি পূর্ণ এবং একটি খালি। আপনি সমস্ত জল এক থেকে অন্যটিতে সরিয়ে নিতে চান এবং আপনার কাছে 4 টি বালতি রয়েছে । সবচেয়ে দক্ষ লোক হ'ল ৪ জন।

আপনার যদি 1-3 জন থাকে তবে আপনি কিছু বালতি ব্যবহার করে নিখোঁজ রয়েছেন । আপনার যদি 5 বা ততোধিক লোক থাকে, তবে সেই লোকদের মধ্যে অন্তত একটি বালতির জন্য অপেক্ষা করতে আটকে আছে । আরও বেশি সংখ্যক লোক যুক্ত করা ... ক্রিয়াকলাপটিকে গতি দেয় না।

সুতরাং আপনি একই সাথে কিছু লোক (বালতি ব্যবহার) করতে পারেন এমন অনেক লোককে রাখতে চান

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

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

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

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


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

প্রকৃতপক্ষে এই দৃশ্যটি টিসিপি নেটওয়ার্কিংয়ে ল্যাটেন্সি এবং উইন্ডো আকারের মধ্যে সম্পর্কের মানক বর্ণনার সাথে খুব মিল, যার কারণে এটি আমার দিকে ঝাঁপিয়ে পড়ে।


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

আপনি কোন বক্তৃতার চিত্রটি ব্যবহার করেছেন তা নিয়ে কেউ বিভ্রান্ত নয় এবং এটি কোনও খারাপ উপমা নয়। প্রতিটি উপমাটির কিছু সীমা থাকে যার বাইরে এটি বর্ণনা করার মতো জিনিস থেকে সরিয়ে দেয় এবং দরকারী হয়ে যায় ce আমি কেবল এটি উল্লেখ করেছি কারণ আসলটি আমাকে ভিন্ন দৃশ্যের মতো দৃ strongly়তার সাথে স্মরণ করিয়েছিল এবং কারণ এই সংস্করণটি (আশাকরি) উন্নত ভবিষ্যদ্বাণীটির জন্য আর জটিল বলে আমি মনে করি না।
25:43

0

এটি বেশ সোজা এবং বুঝতে সহজ। আপনার সিপিইউ যা আপনাকে সমর্থন করে তার চেয়ে বেশি থ্রেড থাকা আসলে সিরিয়ালাইজ করা হয় এবং সমান্তরাল হয় না। আপনার সিস্টেম যত ধীরে ধীরে ধীরে ধীরে থাকবে। আপনার ফলাফলগুলি আসলে এই ঘটনার প্রমাণ।

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