মাল্টিথ্রেডিং: কোরের চেয়ে বেশি থ্রেডের বিন্দু কী?


142

আমি ভেবেছিলাম একটি মাল্টি-কোর কম্পিউটারের বিষয়টি হ'ল এটি একই সাথে একাধিক থ্রেড চালাতে পারে। সেক্ষেত্রে আপনার যদি কোয়াড-কোর মেশিন থাকে তবে এক সাথে 4 টিরও বেশি থ্রেড চলমান কী? তারা কি একে অপরের কাছ থেকে কেবল সময় (সিপিইউ রিসোর্স) চুরি করবে না?


52
আমরা এই ধরণের প্রশ্ন উপভোগ করি, তারা কোনও কিছুর মূল
বিষয়টিকে

6
আপনার কোয়াড কোর মেশিনে আপনি যখন ফায়ারফক্স, এমএস ওয়ার্ড, উইন্যাম্প, একলিপস এবং একটি ডাউনলোড ম্যানেজার (চারটি বেশি প্রোগ্রাম / প্রক্রিয়া) এক সাথে চলমান শেষবার কখন ছিল? এছাড়াও, একটি একক অ্যাপ্লিকেশন মাঝে মাঝে চারটি থ্রেডেরও বেশি স্পোন করতে পারে - কীভাবে এটি?
আমারঘোষ

1
চুরি করা খারাপভাবে হয় না। আপনার কাছে গুরুত্বপূর্ণ কাজগুলির জন্য উচ্চতর অগ্রাধিকার সহ একটি থ্রেড থাকতে পারে যা সময় চুরি করতে হয়।
কিচিক

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

উত্তর:


81

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

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

এটি আসলে এর চেয়ে আরও জটিল:

  • আপনার যদি পাঁচটি বিট কাজ থাকে যা সমস্ত একবারে করা দরকার? এগুলির চারটি চালানো এবং তারপরে পঞ্চমটি চালানোর চেয়ে একবারে এগুলি চালানো আরও বেশি অর্থবোধ করে।

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

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

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


16
"এর জন্য +1 তবে কেবলমাত্র প্রতিটি স্বতন্ত্র থ্রেডের 100% সিপিইউ প্রয়োজন"। এই ধারণাটি আমি বুঝতে পারি নি যে আমি তৈরি করছিলাম।
নিক হেইনার

1
একটি দুর্দান্ত প্রশ্নের দুর্দান্ত উত্তর। ধন্যবাদ!
এজেজেকেস

53

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

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


11
ভাল বলেছ. 'সিপিইউ প্রতি এক থ্রেড' আর্গুমেন্ট কেবল সিপিইউ-বাউন্ড কোডে প্রযোজ্য। থ্রেড ব্যবহারের আরেকটি কারণ অ্যাসিঙ্ক্রোনাস প্রোগ্রামিং।
জোশুয়া ডেভিস

26

মুল বক্তব্যটি হ'ল, থ্রেডের গণনা মূল গণনা ছাড়িয়ে গেলে কোনও বাস্তব গতিবেগ না পেয়েও আপনি থ্রেড যুক্তির টুকরো টুকরো টুকরো টানতে পারেন যা পরস্পরের উপর নির্ভরশীল হওয়া উচিত নয়।

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

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

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


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

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

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

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

15

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

একটি থ্রেড বিবেচনা করুন যা হার্ড ড্রাইভের বাইরে ডেটা পড়তে হবে। 2014 সালে, একটি সাধারণ প্রসেসর কোর 2.5 গিগাহার্টজ এ পরিচালনা করে এবং চক্র প্রতি 4 টি নির্দেশাবলী কার্যকর করতে সক্ষম হতে পারে। 0.4 এনএস এর চক্র সময়ের সাথে, প্রসেসর প্রতি ন্যানোসেকেন্ডে 10 নির্দেশাবলী কার্যকর করতে পারে। সাধারণ যান্ত্রিক হার্ড ড্রাইভের সন্ধানের সময়গুলি প্রায় 10 মিলিসেকেন্ডের মধ্যে রয়েছে, প্রসেসর হার্ড ড্রাইভ থেকে কোনও মান পড়তে সময় লাগে 100 মিলিয়ন নির্দেশাবলী কার্যকর করতে সক্ষম। একটি ছোট ক্যাশে (4 এমবি বাফার) এবং হাইব্রিড ড্রাইভগুলি কয়েক গিগাবাইট স্টোরেজ সহ হার্ড ড্রাইভের সাথে উল্লেখযোগ্য পারফরম্যান্সের উন্নতি হতে পারে, কারণ হাইব্রিড বিভাগ থেকে সিক্যুয়ালি পাঠ বা পড়ার জন্য ডেটা ল্যাটেন্সি দ্রুততার কয়েকটি আদেশ হতে পারে।

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

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

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

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

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


একক থ্রেড এবং একটি সারি দিয়ে একই কাজটি করা যেতে পারে: 2 2-4 কোরে ৮০ টি থ্রেড থাকার কি আসলেই কোনও উপকার আছে যা তারা পৌঁছানোর সাথে সাথে একটি সারি থেকে খালি কাজগুলি খায় over এবং তাদের কিছু করার নেই?
দিমিত্রি

8

উপরোক্ত উত্তরগুলির বেশিরভাগই কর্মক্ষমতা এবং একযোগে পরিচালনার বিষয়ে কথা বলে। আমি একটি ভিন্ন কোণ থেকে এটি যোগাযোগ করতে যাচ্ছি।

আসুন, একটি সরল টার্মিনাল এমুলেশন প্রোগ্রামের ক্ষেত্রে ধরা যাক। আপনাকে নিম্নলিখিত জিনিসগুলি করতে হবে:

  • দূরবর্তী সিস্টেম থেকে আগত অক্ষরের জন্য দেখুন এবং সেগুলি প্রদর্শন করুন
  • কীবোর্ড থেকে আসা জিনিসগুলির জন্য দেখুন এবং এগুলি দূরবর্তী সিস্টেমে প্রেরণ করুন

(রিয়েল টার্মিনাল এমুলেটরগুলি আপনার প্রদর্শন প্রকারের পাশাপাশি প্রতিপাদ্য সামগ্রীর প্রতিধ্বনি সহ আরও অনেক কিছু করে, তবে আমরা এখনই এটি পেরিয়ে যাব))

নিম্নলিখিত সিউডোকোড অনুসারে দূরবর্তী থেকে পড়ার লুপটি এখন সহজ is

while get-character-from-remote:
    print-to-screen character

কীবোর্ড নিরীক্ষণ এবং প্রেরণের জন্য লুপটিও সহজ:

while get-character-from-keyboard:
    send-to-remote character

তবে সমস্যাটি হ'ল আপনাকে একসাথে এটি করতে হবে। কোডটি এখন আপনার আরও থ্রেডিং না থাকলে আরও দেখতে এটি দেখতে হবে:

loop:
    check-for-remote-character
    if remote-character-is-ready:
        print-to-screen character
    check-for-keyboard-entry
    if keyboard-is-ready:
        send-to-remote character

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

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

তাহলে আপনি থ্রেডিং কেন ব্যবহার করবেন না?

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

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


6

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

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

এই সম্পর্কিত প্রশ্নটিও দেখুন: থ্রেডের জন্য ব্যবহারিক ব্যবহারগুলি


ইউআই হ্যান্ডলিং আইও-বাউন্ড টাস্কের একটি সর্বোত্তম উদাহরণ। একক সিপিইউ কোর প্রসেসিং এবং আইও উভয় কাজ করা ভাল নয়।
ডোনাল ফেলো

6

আমি @ কিরিয়ুর এই দৃ with়তার সাথে দৃ strongly়ভাবে একমত নই যে আদর্শ নম্বরটি সিপিইউতে একটি থ্রেড।

এটি এইভাবে চিন্তা করুন: আমাদের কেন মাল্টি-প্রসেসিং অপারেটিং সিস্টেম রয়েছে? বেশিরভাগ কম্পিউটার ইতিহাসের জন্য, প্রায় সমস্ত কম্পিউটারের একটি সিপিইউ ছিল। তবুও 1960 এর দশক থেকে সমস্ত "আসল" কম্পিউটারে মাল্টি-প্রসেসিং (ওরফে মাল্টি-টাস্কিং) অপারেটিং সিস্টেম ছিল।

আপনি একাধিক প্রোগ্রাম চালান যাতে কোনও চলতে পারে তবে অন্যরা আইওর মতো জিনিসগুলির জন্য অবরুদ্ধ থাকে।

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

থ্রেডগুলি কেবল এমন কাজ যা কিছুটা দক্ষ efficient কোনও কার্য, প্রক্রিয়া এবং থ্রেডের মধ্যে কোনও মৌলিক পার্থক্য নেই।

একটি সিপিইউ হ'ল নষ্ট করার মতো ভয়ঙ্কর জিনিস, তাই যখন আপনি পারেন তখন এটি ব্যবহারের জন্য প্রচুর পরিমাণে প্রস্তুত।

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

@ ক্যারিওর সাথে মতবিরোধ কেবল আইএমএইচও, বাকিটি সত্য।


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

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

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

5

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

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


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

3

অনেক থ্রেড ঘুমিয়ে থাকবে, ব্যবহারকারীর ইনপুট, I / O এবং অন্যান্য ইভেন্টের জন্য অপেক্ষা করছে।


অবশ্যই। উইন্ডোতে টাস্ক ম্যানেজারটি ব্যবহার করুন বা বাস্তব ওএস-এ টপ করুন এবং দেখুন যে কতগুলি কার্য / প্রক্রিয়া অপরিবর্তিত রয়েছে। এটি সর্বদা 90% বা তারও বেশি।
ফিশটপেকর্ডস

2

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


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

2

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

একটি প্রক্রিয়া একটি অ্যাপ্লিকেশন জন্য অন্য নাম। সাধারণত, প্রক্রিয়া একে অপরের থেকে পৃথক। যদি একটি প্রক্রিয়া মারা যায়, তবে এটি অন্য প্রক্রিয়াটিকেও মরে যায় না। প্রক্রিয়াগুলি যোগাযোগ করা বা মেমরি বা I / O এর মতো সংস্থানগুলি ভাগ করে নেওয়া সম্ভব।

প্রতিটি প্রক্রিয়া পৃথক ঠিকানার স্থান এবং স্ট্যাক আছে। একটি প্রক্রিয়াতে একাধিক থ্রেড থাকতে পারে, প্রত্যেকে একই সাথে নির্দেশনা কার্যকর করতে সক্ষম। প্রক্রিয়াটির সমস্ত থ্রেড একই ঠিকানা স্থান ভাগ করে দেয় তবে প্রতিটি থ্রেডের নিজস্ব স্ট্যাক থাকবে have

আশা করি এই সংজ্ঞাগুলি এবং এই মূলসূত্রগুলি ব্যবহার করে আরও গবেষণা আপনার বুঝতে সহায়তা করবে।


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

@ ডেভিড সম্ভবত এটি আমার প্রশ্নের সরাসরি উত্তর ছিল না, তবে আমি এখনও এটি পড়তে শিখেছি বলে মনে করি।
নিক হেইনার

1

থ্রেডগুলির আদর্শ ব্যবহার হ'ল প্রকৃতপক্ষে প্রতি এক।

তবে, আপনি যদি একচেটিয়াভাবে অ্যাসিঙ্ক্রোনাস / অ-ব্লকিং আইও ব্যবহার না করেন, তবে আপনার সিপিইউ ব্যবহার করবে না এমন এক পর্যায়ে আইওতে থ্রেড ব্লক হয়ে যাওয়ার সম্ভাবনা রয়েছে।

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


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

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

@ নিক বেস্টিন: দুর্ভাগ্যক্রমে, যেমনটি আমি মূল উত্তরে বলেছি, বেশিরভাগ আধুনিক ভাষাগুলি সহজেই এমন একটি সিস্টেম কার্যকর করতে ক্ষুদ্র don'tণ দেয় না যা কার্যকরভাবে এটি কার্যকর হয় না তাত্পর্যপূর্ণ - আপনি ভাষাটির সাধারণ ব্যবহারের বিরুদ্ধে লড়াইয়ের কিছুটা কাজ শেষ করেন।
কিরিউ

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

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

1

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

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


1

আমি জানি এটি প্রচুর ভাল উত্তর সহ একটি অতি পুরানো প্রশ্ন, তবে আমি বর্তমান পরিবেশে গুরুত্বপূর্ণ এমন কিছু বিষয় উল্লেখ করতে এখানে আছি:

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


0

আপনার প্রথম অনুমানের জবাবে: মাল্টি-কোর মেশিনগুলি একই সাথে একক প্রক্রিয়ার একাধিক থ্রেড নয়, একসাথে একাধিক প্রক্রিয়া চালাতে পারে।

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

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


-5

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


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

-8

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

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

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


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

প্রত্যেকের কাছে আমার উত্তরটি নিচে পরিবর্তন করা, এটি থ্রেড ব্যবহারের বিরুদ্ধে যুক্তি নয়! আপনি যদি এমন কোনও রাজ্য মেশিন কোড করতে পারেন যে এটি দুর্দান্ত, এবং নিশ্চিত না যে আপনার প্রয়োজন না থাকলেও প্রায়শই পৃথক থ্রেডে স্টেট মেশিনগুলি চালানো বোধগম্য হয়। আমার মন্তব্যটি ছিল যে প্রায়শই থ্রেডগুলি ব্যবহার করার পছন্দটি মূলত স্টেট মেশিনগুলি ডিজাইনের এড়ানোর ইচ্ছা থেকে তৈরি করা হয়, যা অনেক প্রোগ্রামার অন্য কোনও উপকারের পরিবর্তে "খুব শক্ত" হিসাবে বিবেচনা করে।
আর .. গিথহাব বন্ধ হেল্পিং আইসিসি
আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.