একক থ্রেড এমন একাধিক থ্রেড কী করতে পারে? [বন্ধ]


100

থ্রেডগুলি কোড প্রয়োগের ক্ষেত্রে গতি বাড়িয়ে দিতে পারে, সেগুলি কি আসলে দরকার? কোডের প্রতিটি টুকরা কি একক থ্রেড ব্যবহার করে করা যায় বা এমন কিছু আছে যা কেবলমাত্র একাধিক থ্রেড ব্যবহার করে সম্পন্ন করা যায়?


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

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

14
একটি একক থ্রেডেড প্রোগ্রাম একাধিক-থ্রেড প্রোগ্রাম যেভাবে পারে সংস্থানগুলিকে অচল করে দিতে পারে না।
zzzzBov

3
উত্তর: দুটি কোর চালান
ড্যানিয়েল লিটল

6
উত্তর: একটি অচলাবস্থা কারণ।
চাকরি

উত্তর:


111

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

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

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

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

এই নষ্ট সময়টি ব্যবহার করতে থ্রেডিং ব্যবহার করে আমরা প্রক্রিয়াটি আবার লিখতে পারি:

  1. # 1 আনুন
  2. কোন অপারেশন
  3. # 2 আনুন
  4. # 1 হয়ে গেছে, এটি প্রক্রিয়া করুন
  5. # 1 লিখুন
  6. # 1 আনুন
  7. # 2 সম্পন্ন হয়েছে, এটি প্রক্রিয়া করুন
  8. # 2 লিখুন
  9. আনুন # 2

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

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

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

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

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

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


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

8
থ্রেডগুলি আইও ব্লক করা প্রক্রিয়াকরণে কীভাবে সহায়তা করে তা বর্ণনা করার জন্য +1। থ্রেডের আরেকটি ব্যবহার হ'ল ইউআইকে ব্যবহারকারীর ক্রিয়াগুলি (মাউস মুভমেন্ট, প্রগতি বার, কীস্ট্রোক) প্রক্রিয়াকরণ চালিয়ে যাওয়ার অনুমতি দেওয়া যাতে ব্যবহারকারীর উপলব্ধিটি হয় যে প্রোগ্রামটি 'হিমায়িত' হয়নি।
jqa

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

9
@ জেমস: আমি ইউআই প্রসেসিংটিকে I / O এর অন্য একটি রূপ হিসাবে শ্রেণিবদ্ধ করতাম। সম্ভবত সবচেয়ে খারাপ, ব্যবহারকারীরা ল্যাগি এবং অ-লিনিয়ার হতে থাকে। :)
টিএমএন

7
কম্পিউটারের একক কোর বা সিপিইউ হওয়ার আশেপাশে প্রশ্নোত্তর সম্পর্কে একটি নীরব ধারণা রয়েছে। আমার ঘড়ির দুটি কোর রয়েছে, আমি সন্দেহ করি যে কোনও আধুনিক মেশিনে অনুমানটি বৈধ।
ব্লুবেরিফিল্ডস

37

একক থ্রেড এমন একাধিক থ্রেড কী করতে পারে?

কিছুই নেই।

সাধারণ প্রমাণ স্কেচ:

  • [চার্চ-টিউরিং কনজেকচার] comp যে সমস্ত কিছু গণনা করা যায় তা ইউনিভার্সাল ট্যুরিং মেশিন দ্বারা গণনা করা যায়।
  • একটি ইউনিভার্সাল ট্যুরিং মেশিন একক থ্রেডযুক্ত।
  • তবে, সমস্ত কিছু যা গণনা করা যায় সেগুলি একক থ্রেড দিয়ে গণনা করা যায়।

নোট, তবে, সেখানে একটি বৃহত্তর অনুমান লুকিয়ে আছে: যথা যে একক থ্রেডের মধ্যে ব্যবহৃত ভাষাটি টুরিং-সম্পূর্ণ।

সুতরাং, আরও আকর্ষণীয় প্রশ্নটি হবে: " নন-টিউরিং-সম্পূর্ণ ভাষায় কেবলমাত্র বহু-থ্রেডিং যুক্ত করা কি এটিকে টুরিং-সম্পূর্ণ করতে পারে?" এবং আমি বিশ্বাস করি, উত্তরটি "হ্যাঁ"।

আসুন মোট কার্যকরী ভাষা গ্রহণ করা যাক। [যারা পরিচিত নন: ফাংশনাল প্রোগ্রামিং যেমন ফাংশন সহ প্রোগ্রামিং করা হয়, মোট ফাংশনাল প্রোগ্রামিং মোট ফাংশন সহ প্রোগ্রামিং হয়।]

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

তবে, আপনি কোনও টিএফপিএলে থ্রেডিং যুক্ত করার সাথে সাথে আপনি অসীম লুপগুলি পাবেন: লুপটির প্রতিটি পুনরাবৃত্তি একটি নতুন থ্রেডে করুন। প্রতিটি স্বতন্ত্র থ্রেড সর্বদা একটি ফলাফল দেয়, সুতরাং এটি মোট, তবে প্রতিটি থ্রেড একটি নতুন থ্রেড তৈরি করে যা পরবর্তী পুনরাবৃত্তিকে কার্যকর করে, বিজ্ঞাপন হিসাবে।

আমি মনে করি এই ভাষা টিউরিং-সম্পূর্ণ হবে।

খুব কমপক্ষে, এটি মূল প্রশ্নের উত্তর দেয়:

একক থ্রেড এমন একাধিক থ্রেড কী করতে পারে?

যদি আপনি একটি ভাষা যা অসীম loops ব্যবহার করতে পারবেন না আছে, তারপর বহু-থ্রেডিং আপনি অসীম loops করার অনুমতি দিয়েছে।

দ্রষ্টব্য, অবশ্যই, থ্রেড তৈরি করা একটি পার্শ্ব-প্রতিক্রিয়া এবং সুতরাং আমাদের বর্ধিত ভাষা কেবল মোট নয়, এটি এমনকি কার্যকরীও নয়।


13
যেহেতু আপনি একটি "প্রমাণ" এনেছেন, তাই আমি আপনাকে "ভাল, আসলে ..." থেকে নিজেকে আটকাতে পারি না। আমি মনে করি আপনি গণ্যতার ধারণাটি আপত্তি করছেন। প্রমাণটি একটি সুন্দর জিনিস এবং আমি আপনার বক্তব্যটি পাই, তবে এটি সত্যিকারের সঠিক বিমূর্ত স্তরে নয়। না করতে সক্ষম হচ্ছে কিছু করতে পারবে না হিসাবে একই নয় গনা , যেমন, আপনি আপনার প্রমাণ ব্যবহার করতে পারে না বলে, টুরিং মেশিন পারবেন না কারণ গনা "প্রত্যেক গণনীয় ফাংশন" এটি করতে পারে না 3 সেকেন্ডের মধ্যে এটি। কড়া কথায় বলতে গেলে, বিনা বাধা ছাড়াই একটি একক থ্রেডড মেশিন তার প্রসেসরের গণনাতে ব্যস্ত থাকার সময় I / O অ্যাক্সেস করতে পারে না।
xmm0

1
এবং, কোনও আসল কম্পিউটার টিউরিং মেশিন নয়।
জেনস

1
@ কোল জোনসন: একটি অচলাবস্থা বাস্তবায়নের বিশদ। দৃশ্যমান আউটপুটটি "থামছে না", যা একক থ্রেডের সাহায্যে সহজেই সম্ভব।
হেইনজি

1
@ হেইনজি: "সহজেই করণীয়" একটি সংক্ষিপ্তসার। যদ্দুর মনে পড়ে, দ্বিতীয় বা তৃতীয় প্রোগ্রাম যা আমি কখনও লিখেছেন ঠিক করেনি! ;-)
জোছিম সৌর

1
মহাবিশ্ব যদি একক থ্রেড এড হয়, তবে স্ট্রিং তত্ত্বটি কী? আপনি বিজ্ঞানের সাথে এভাবে তর্ক করতে পারবেন না।
কর্সিকা

22

তত্ত্ব অনুসারে, বহুবিবাহিত প্রোগ্রাম যা কিছু করে তা কেবলমাত্র ধীর গতিতে একক থ্রেডযুক্ত প্রোগ্রামের সাহায্যে করা যেতে পারে।

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

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


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

3
@ রবার্ট: আমি মনে করি পেটার একাধিক প্রসেসরের উপর চালনার জন্য বিভাজনের কাজটি ধারণাটি ব্যাখ্যা করতে SETI @ হোম ব্যবহার করছে। বিতরণকারী কম্পিউটিং অবশ্যই মাল্টিথ্রেডিংয়ের চেয়ে আলাদা তবে ধারণাটি একই রকম।
স্টিভেন

5
আমি মনে করি যে SETI উদাহরণটি মুতলি-থ্রেডের পরিবর্তে কম্পিউটিং বিতরণ করা হয়েছে। একই ধারণা কিন্তু একই জিনিস না।

11

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

- থ্রেড সহ সমস্যা (www.eecs.berkeley.edu/Pubs/TechRpts/2006/EECS-2006-1.pdf)।

থ্রেড ব্যবহার করে এমন কিছু কার্যকারিতা সুবিধা রয়েছে যা আপনি একাধিক কোর জুড়ে কাজ বিতরণ করতে পারেন তবে সেগুলি প্রায়শই দুর্দান্ত দামে আসে।

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

এই দৃশ্যের আরেকটি বিবেচনা হ'ল মেমরি ফাঁস। কিছু ক্ষেত্রে রয়েছে যেখানে আপনি থ্রেড ক্র্যাশ করে গ্রেফতার হয়ে পরিচালনা করতে পারেন (ইউএনআইএক্স-এ, কিছু নির্দিষ্ট সংকেতগুলি থেকে উদ্ধার করে - এমনকি সেগফল্ট / এফপিভিলিয়েশনও সম্ভব) তবে সেই ক্ষেত্রেও আপনি সেই থ্রেড দ্বারা বরাদ্দকৃত সমস্ত স্মৃতি ফাঁস করে দিতে পারেন (malloc, নতুন, ইত্যাদি)। সুতরাং আপনি যখন প্রক্রিয়া চালিয়ে যেতে পারেন তখন প্রতিটি ত্রুটি / পুনরুদ্ধারের সাথে এটি সময়ের সাথে আরও বেশি স্মৃতি মেশে। আবার এপাচির মেমরি পুলের ব্যবহারের মতো এটিকে হ্রাস করার কিছুটা উপায় রয়েছে to তবে এটি এখনও মেমরি থেকে রক্ষা করে না যে থ্রেডটি সম্ভবত থ্রেড ব্যবহার করে third

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

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

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

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


আমার টিএল; ডিআর উত্তর একক থ্রেড আপনার জন্য কি করবে না এই দুর্দান্ত টুকরা তুলনায় উত্তরে।
bmike

1
বিকেলে কফি বিরতি
মাইকের

10

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

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

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

মাল্টি-থ্রেডেড বিকাশের নেতিবাচক দিকটি হ'ল আপনাকে সমঝোতা বিষয়গুলি, লক করার কৌশল এবং এগুলি সম্পর্কে আরও বুঝতে হবে। ত্রুটি-মুক্ত মাল্টি-থ্রেড কোড বিকাশ করা বেশ শক্ত হতে পারে। এবং ডিবাগিং আরও শক্ত হতে পারে।


9

এমন কি কিছু আছে যা কেবলমাত্র একাধিক থ্রেড ব্যবহার করে সম্পন্ন করা যায়?

হ্যাঁ. আপনি একক থ্রেড সহ একাধিক সিপিইউ বা সিপিইউ কোরে কোড চালাতে পারবেন না।

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


6

থ্রেডগুলি কেবল গতি সম্পর্কে নয় তবে সমাবলিকতা সম্পর্কে।

@ পিটারের পরামর্শ অনুসারে যদি আপনার কাছে ব্যাচের অ্যাপ্লিকেশন না থাকে তবে তার পরিবর্তে ডাব্লুপিএফ এর মতো একটি জিইউআই টুলকিট আপনি কীভাবে কেবল একটি থ্রেড দিয়ে ব্যবহারকারী এবং ব্যবসায়িক যুক্তির সাথে যোগাযোগ করতে পারেন?

এছাড়াও, ধরুন আপনি একটি ওয়েব সার্ভার তৈরি করছেন। আপনি কীভাবে একাধিক ব্যবহারকারীর একযোগে কেবল একটি থ্রেড (অন্য কোনও প্রক্রিয়া মনে না করে) পরিবেশন করবেন?

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

হ্যাঁ, সমান্তরাল এবং সমবর্তী প্রোগ্রামিং শক্ত। তবে প্রয়োজনীয়।


3
"কেবল একটি থ্রেড" এর অর্থ কয়েকটি জিনিস হতে পারে - উদাহরণস্বরূপ, আপনি একক (ওএস বা সবুজ) থ্রেডের মধ্যে সমবায় মাল্টিটাস্কিং সিমুলেট করার জন্য সীমাবদ্ধ ধারাবাহিকতা ব্যবহার করতে পারেন।
ফ্র্যাঙ্ক শায়ারার

অবশ্যই, তবে আমি টিপটির জন্য @ ফ্র্যাঙ্ক +1 প্রশ্নটিকে কিছুটা প্রসঙ্গ দিচ্ছি।
র‌্যান্ডল্ফ রিনকন ফাদুল

3
থ্রেডগুলি এটিকে আরও সহজ করে তুলতে পারে, তবে আপনি যে সমস্ত কাজকর্ম উল্লেখ করেছেন সেগুলির সমস্ত কাজ থ্রেড ছাড়াই করা যেতে পারে, এবং প্রকৃতপক্ষে ব্যবহৃত হত। উদাহরণস্বরূপ, ক্যানোনিকাল জিইউআই লুপ ব্যবহৃত হত (সত্য) G জিইউআই ইভেন্টগুলি প্রক্রিয়া করে; একটি বিট গণনা}। কোনও থ্রেডের প্রয়োজন নেই।
কিথবি

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

6

মাল্টি-থ্রেডিং দীর্ঘ প্রক্রিয়াজাতকরণ ক্রিয়াকলাপের সময় GUI ইন্টারফেসটিকে এখনও প্রতিক্রিয়াশীল হতে দেয়। মাল্টি-থ্রেডিং ব্যতীত, দীর্ঘ প্রক্রিয়া চলাকালীন ব্যবহারকারী একটি লক করা ফর্মটি দেখতে আটকে থাকবে।


এটি সম্পূর্ণ সঠিক নয়। তত্ত্ব অনুসারে, আপনি আপনার দীর্ঘ অপারেশনটিকে অনেক ছোট ছোট করে ভাগ করতে পারেন এবং এর মধ্যে ইভেন্ট প্রসেসিং আপডেট করতে পারেন।
সেবাস্তিয়ান নেগ্রাসজাস

@ সেবাসশন এন। তবে দীর্ঘ প্রক্রিয়াটি যদি ছোট আকারে পুনরায় সজ্জিত করা না যায়? অন্য থ্রেডে প্রক্রিয়া চালনার ক্ষমতা জিইউআই থ্রেড (মূল থ্রেড) মুক্ত করতে পারে এখনও প্রতিক্রিয়াশীল।
LarsTech

5

মাল্টি-থ্রেড কোড প্রোগ্রামের যুক্তিকে অচল করে দিতে পারে এবং একক থ্রেডগুলি যেভাবে পারে না সেভাবে বাসি ডেটা অ্যাক্সেস করতে পারে।

থ্রেডস একটি অস্পষ্ট বাগ নিতে পারে এমন একটি গড় প্রোগ্রামার থেকে প্রত্যাশা করা যেতে পারে যে এটি কোনও ডিবাগ করে এটিকে এমন রাজ্যে নিয়ে যেতে পারে যেখানে গল্পগুলির ভাগ্যের কথা বলা হয় যখন এটির প্যান্টগুলির সাথে একই বাগটি ধরতে হবে যখন কোনও সতর্কতা প্রোগ্রামার যখন ঘটছিল ঠিক তখন দেখছিল সঠিক মুহূর্ত


4

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

ব্লক না করে কতটা পড়তে পারে তা দেখতে আইও লাইবটিতে পরীক্ষা করার পদ্ধতিগুলি যুক্ত করা এতে সহায়তা করতে পারে তবে অনেক লাইব্রেরি এ সম্পর্কে কোনও সম্পূর্ণ গ্যারান্টি দেয় না


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

@keith যে -blocking আই আমি বিশেষভাবে বলেন ব্লক
জোরদার খামখেয়াল

তবে আপনি যদি প্রতিক্রিয়াশীল থাকতে চান তবে আপনি আইওকে ব্লক করবেন কেন? এমন কোনও ব্লকিং আইও রয়েছে যা সাধারণত একটি অবরুদ্ধ অবরোধ নেই? আমি কিছু ভাবতে পারি না।
কিথবি

@ কিথ জাওয়ার আরএমআই ব্লক করছে এবং আপনি এটির সাথে কলব্যাক প্রয়োগ করতে পারবেন (তবে এটি অন্য থ্রেড তৈরি করে) তবে এটি ফায়ারওয়াল দ্বারা অবরুদ্ধ করা যেতে পারে
ratchet freak

এটি জাভা আরএমআইয়ের সীমাবদ্ধতার মতো শোনাচ্ছে, একক থ্রেড কোডের অন্তর্নিহিত সীমাবদ্ধতা নয়। তদুপরি, আপনি আরএমআই করছেন আপনি ঠিক একটি দূরবর্তী মেশিনে, মৃত্যুদন্ড কার্যকর করার একটি পৃথক "থ্রেড" আছে।
কিথবি

4

অনেক ভাল উত্তর তবে আমি নিশ্চিত যে এটির কোনও বাক্যাংশ আমার কাছে যেমনটি ঠিক তেমন নয় - সম্ভবত এটি এটিকে দেখার জন্য অন্যরকম উপায় দেয়:

থ্রেডগুলি কেবলমাত্র প্রোগ্রামিং সরলকরণ যেমন অবজেক্টস বা অভিনেতা বা লুপগুলির জন্য (হ্যাঁ, আপনি লুপগুলি প্রয়োগ করেন এমন কিছু আপনি যদি / গোটো দিয়ে প্রয়োগ করতে পারেন)।

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

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

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


+1 - থ্রেডগুলি মূলত সিক্যুয়াল মেশিনে সমান্তরালতার জন্য কেবল একটি বিমূর্ততা সরবরাহ করে, যেমন উচ্চ স্তরের প্রোগ্রামিং ল্যাঙ্গুয়েজগুলি মেশিন কোডের বিমূর্ততা সরবরাহ করে।
mouviciel

0

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

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


0

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

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

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

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

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

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