বর্তমান সফ্টওয়্যার শিল্পে মাল্টিথ্রেডিং কতটা গুরুত্বপূর্ণ? [বন্ধ]


59

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

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


8
আপনি সম্ভবত এটি পরিষ্কারভাবে না করে থাকতে পারেন তবে আপনি অবশ্যই পর্দার আড়ালে এর সুবিধা নিয়েছেন।
মার্টিন ইয়র্ক

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

1
আমি এটি ওয়েব বিকাশে খুব কমই ব্যবহার করি তবে আমি মনে করি এটি অন্য কোথাও বেশি সাধারণ। উদাহরণস্বরূপ, আমি সম্প্রতি একটি Android অ্যাপ্লিকেশান লেখা এবং আপনি করছি মনে করা হতো , প্রয়োজনীয় multithreading ব্যবহার করতে যদি আপনার কোন নেটওয়ার্ক কার্যকলাপ আছে।
jwegner

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

1
একক থ্রেড প্রোগ্রামিংয়ের জন্য "থ্রেডের বাইরে চিন্তাভাবনা" করার ক্ষমতাটিও খুব দুর্দান্ত। আপনি মঞ্জুর করার জন্য অনেক কম গ্রহণ করেন এবং আপনার কোডটি সাধারণত আরও দৃust় এবং পুনরায় ব্যবহারযোগ্য।
corsiKa

উত্তর:


92

এটা অত্যন্ত গুরুত্বপূর্ণ।

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

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

  • কম্পিউটারগুলি এখন ভারী নেটওয়ার্কযুক্ত এবং আধুনিক অ্যাপ্লিকেশনগুলি বিভিন্ন উত্স থেকে সমৃদ্ধ তথ্য আনতে সক্ষম হওয়ার উপর নির্ভর করে।

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

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

সরঞ্জাম বিক্রেতাদের জন্য চ্যালেঞ্জটি হ'ল আমাদের গ্রাহকদের ভবিষ্যতে তারা যে অ্যাসিনক্রোনাস অবকাঠামো ব্যবহার করবে তা মোকাবেলা করার জন্য মাল্টিথ্রেডিংয়ের চেয়ে আরও ভাল কিছু নিয়ে আসা ।


5
সর্বোত্তম উত্তরের জন্য +1, এটি আমার নিজের নম্র প্রচেষ্টার চেয়ে বেশি creditণের দাবিদার।
পিটার তারেক

2
অবিচ্ছিন্ন ফ্যাশনে ক্রমবর্ধমান তথ্য পাওয়া যাবে। যদি তা সত্য না হয়। । ।
surfasb

2
concurrencyasynchronous আচরণের চেয়ে গুরুত্বপূর্ণ । সম্মতি ছাড়াই আপনার অ্যাসিক্রোনাস থাকতে পারে (অর্থাত্ একটি সিঙ্গল কোর সিপিইউতে একাধিক থ্রেড) এর asynchronousঅর্থগত বিকল্প নয় concurrency

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

"সম্মতিটি প্রায়শই কেবল সিমুলেটেড সিমুলেশন হয়, যেমন, সময় কাটানোর মাধ্যমে অসহযোগিতামূলক মাল্টিটাস্কিং": আমার বোঝার মধ্যে এটি এখনও (সত্য) সম্মতি, সম্ভবত আপনার অর্থ কি এটি সমান্তরালতা নয়?
জর্জিও

46

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


3
+1: আগের চেয়ে আরও গুরুত্বপূর্ণ। এটি আরও মনে রাখবেন যে একটি সিস্টেম ডিজাইনে, আপনি কেবলমাত্র কাজটি বিভাজন করে মাল্টিথ্রেডিংয়ের সুবিধা পেতে পারেন যাতে আরও প্রক্রিয়াগুলি এটি সম্পাদন করে।
স্কট সি উইলসন

11
বেশ কয়েকটি মোবাইল ডিভাইসে ইতিমধ্যে মাল্টি-কোর প্রসেসর রয়েছে!
চে জামি

3
আমি যুক্তি দিয়েছি যে প্রথমবারের ভাগ করে নেওয়ার ব্যবস্থাটি তৈরি হওয়ার পর থেকে বহু-থ্রেডিং গুরুত্বপূর্ণ ছিল। একাধিক প্রসেসর / কোর থাকা একাধিক থ্রেড থাকার জন্য দক্ষতার একটি নতুন মাত্রা যুক্ত করে।
জর্নার্নি

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

1
@ টাক্স-ডি, আপনার মোবাইল ডিভাইসে খুব ভাল খেলা হতে পারে যা একাধিক মূল ব্যবহার করে। এটি ব্যতিক্রমী কিছু নয়।
হোয়াইটকিয়ার্ক

28

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

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


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

19

মাল্টি-থ্রেডিং একটি লাল হেরিং। মাল্টি থ্রেডিং বাস্তব সমস্যা যা করার জন্য একটি বাস্তবায়ন বিস্তারিত concurrency । সমস্ত থ্রেডেড প্রোগ্রামগুলি লকগুলির কারণে একযোগে হয় না এবং কী হয় না।

concurrentপ্রোগ্রামগুলি বাস্তবায়নের জন্য থ্রেডগুলি কেবলমাত্র একটি মডেল এবং বাস্তবায়ন প্যাটার্ন ।

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


+1 যদিও আমি এখনও মনে করি এরলং বহু-থ্রেডযুক্ত; সম্প্রদায়টি পরিবর্তিত ভাগ করে নেওয়া অবস্থার উপর নির্ভর করতে কেবল "থ্রেড" শব্দটির নতুন সংজ্ঞা দিয়েছে এবং এভাবে এটিকে থেকে পৃথক করে।
ড্যান

1
এরলং ভিএম সিপিইউতে ডিফল্টরূপে 1 টি থ্রেড ব্যবহার করে, তবে এরলং বিকাশকারী হিসাবে আপনার কেবল অন্তর্নিহিত ওএস থ্রেডগুলিতে অ্যারালং ভিএম সরবরাহ করে এমন হালকা ওজন প্রসেসের অ্যাক্সেস নেই।

10

আমি সাক্ষাত্কারের সময় মাল্টিথ্রিডিংয়ের কয়েকটি প্রশ্ন পেয়েছি ...

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


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

6

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

সর্বনিম্ন, সমঝোতার সাথে জড়িত ইস্যুগুলি বোঝার বিষয়টি দেওয়া উচিত।

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


4

মনে হচ্ছে আপনি ইতিমধ্যে মাল্টিথ্রেডেড কোড লিখেছেন।

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

অতএব আমি বলব কমপক্ষে বেসিকগুলি জানা গুরুত্বপূর্ণ important


18
<nitpick> দৃশ্যত (গুলি) তিনি মাল্টি কোড, যা একটি মাল্টি পরিবেশে সঞ্চালিত হয় শুধুমাত্র (একক থ্রেডেড) কোড লেখার নয় </ nitpick>।
পিটার Török

2

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


2

সংক্ষিপ্ত উত্তর: খুব।

দীর্ঘ উত্তর: বৈদ্যুতিন (ট্রানজিস্টর ভিত্তিক) কম্পিউটারগুলি প্রযুক্তির শারীরিক সীমাতে দ্রুত এগিয়ে চলেছে। তাপ উত্পাদন এবং মাইক্রোস্কোপিক সার্কিটের কোয়ান্টাম এফেক্টগুলি পরিচালনা করার সময় প্রতিটি কোর থেকে আরও বেশি ঘড়িগুলি আটকানো আরও কঠিন এবং শক্ত হয়ে উঠছে (সার্কিট পাথগুলি ইতিমধ্যে আধুনিক চিপগুলিতে একসাথে এমনভাবে স্থাপন করা হয়েছে যে "কোয়ান্টাম টানেলিং" নামে একটি প্রভাব একটি ইলেক্ট্রন তৈরি করতে পারে traditionalতিহ্যবাহী বৈদ্যুতিক চাপের উপযুক্ত অবস্থার প্রয়োজন ছাড়াই, একটি সার্কিট থেকে অন্য সার্কিটে "ট্র্যাকগুলি ঝাঁপুন"; সুতরাং, কার্যত সমস্ত চিপ নির্মাতারা প্রতিটি সিপিইউতে আরও "এক্সিকিউশন ইউনিট" লাগিয়ে প্রতিটি ঘড়ি আরও কিছু করতে সক্ষম করার দিকে মনোনিবেশ করছে। তারপরে, কম্পিউটার প্রতি ঘড়িতে কেবল একটি কাজ করার পরিবর্তে এটি 2, 4 বা 8 বা 8 পর্যন্ত করতে পারে Inte ইন্টেলের "হাইপারথ্রেডিং" রয়েছে, যা মূলত একটি সিপিইউ কোরকে দুটি লজিকাল প্রসেসরে বিভক্ত করে (কিছু সীমাবদ্ধতা সহ)। কার্যত সমস্ত নির্মাতারা একটি সিপিইউ চিপে কমপক্ষে দুটি পৃথক সিপিইউ কোর রাখছেন এবং ডেস্কটপ সিপিইউগুলির জন্য বর্তমান সোনার মানটি চিপ প্রতি চারটি কোর four আটটি সম্ভব যখন দুটি সিপিইউ চিপ ব্যবহার করা হয়, সেখানে "কোয়াড কোয়াড-কোর" প্রসেসরের (16 ইইউ প্লাস optionচ্ছিক এইচটি) জন্য ডিজাইন করা সার্ভার মাইনবোর্ড রয়েছে এবং সিপিইউগুলির পরবর্তী প্রজন্মের চিপ প্রতি ছয় বা আট হওয়ার সম্ভাবনা রয়েছে।

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


1

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

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

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

এছাড়াও, এই লিঙ্কটি একই সম্পর্কে কিছুটা সহায়ক হতে পারে।


2
এটি ওপি-র প্রশ্নের উত্তর বলে মনে হচ্ছে না: - /
পিটার তারেক

যদিও এটি থ্রেডিংয়ের শীর্ষ (সর্বাধিক) স্তর দেখায়। মাল্টি-থ্রেডিংয়ে ডেল্ভ করার আগে একটি বিষয় বিবেচনা করা উচিত।
c0da

@ c0da স্ট্যাক এক্সচেঞ্জ কোনও আলোচনা বোর্ড নয়: উত্তরগুলির সরাসরি প্রশ্নের উত্তর দেওয়া উচিত। আপনার উত্তরটি কীভাবে জিজ্ঞাসাবাদী সন্ধান করছে তার দিকে ফিরিয়ে আনতে আপনি কি তা প্রসারিত করতে পারেন?

1

এটি আমাকে ভাবছে যে বর্তমান শিল্পের পরিস্থিতিতে মাল্টিথ্রেডিং কতটা গুরুত্বপূর্ণ?

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

  1. মেমরি দক্ষতা (উদা: রেফারেন্সের স্থানীয়তা)।
  2. আলগোরিদিমজাত
  3. Multithreading
  4. SIMD
  5. অন্যান্য অপ্টিমাইজেশন (স্থির শাখার পূর্বাভাসের ইঙ্গিতগুলি, যেমন)

নোট করুন যে এই তালিকাটি কেবলমাত্র গুরুত্বের উপর ভিত্তি করে নয় তবে রক্ষণাবেক্ষণের ক্ষেত্রে তাদের প্রভাব যেমন, তারা কতটা সোজা (যদি না হয় তবে তালিকার অন্যদের সাথে তাদের মিথস্ক্রিয়া ইত্যাদি) এর মতো অনেকগুলি গতিশীলতা based

মেমরি দক্ষতা

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

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

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

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

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

আলগোরিদিমজাত

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

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

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

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

Multithreading

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

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

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

SIMD

নিবন্ধগুলি আরও বিস্তৃত হওয়ার সাথে সাথে আরও বিস্তৃত হওয়ার পরিকল্পনা সহ সিমডও কিছুটা বিশ্রী। মূলত আমরা 64৪-বিট এমএমএক্স রেজিস্ট্রারগুলি দেখেছি যারপরে 128-বিট এক্সএমএম রেজিস্টর সমান্তরালে 4 এসপিএফপি অপারেশন করতে সক্ষম। এখন আমরা 256-বিট ওয়াইএমএম রেজিস্টারগুলি সমান্তরাল 8 টিতে সক্ষম capable এবং ইতিমধ্যে 512-বিট রেজিস্টারগুলির জন্য স্থানে পরিকল্পনা রয়েছে যা সমান্তরালে 16 টির অনুমতি দেবে।

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

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

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

অন্যান্য অপ্টিমাইজেশন

এগুলি প্রায়শই আমি পরামর্শ দিই যে আমরা আজকাল "মাইক্রো" কল করা শুরু করি যদি শব্দটি কেবল অ্যালগরিদমিক ফোকাসের বাইরে না গিয়ে পরিবর্তনের দিকেও যায় যা পারফরম্যান্সে ক্ষুদ্র প্রভাব ফেলে।

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

পারফরম্যান্সের জন্য মাল্টিথ্রেডিংয়ে ফিরে যান

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

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

পারফরম্যান্সের বাইরে মাল্টিট্রেডিং

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

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

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

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


0

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


0

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

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


0

Icallyতিহাসিকভাবে মানুষকে হাতে হাতে মাল্টিথ্রেডেড প্রোগ্রামিং করে সংগ্রাম করতে হয়েছিল। তাদের সরাসরি সমস্ত মূল উপাদান (থ্রেড, সেমোফোরস, মিটেক্সেস, লকস ইত্যাদি) নিয়ে কাজ করতে হয়েছিল।

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

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

লক্ষ্যটি অনুভূমিকভাবে স্কেলিং করছে। আরও বড় সার্ভার কেনার পরিবর্তে আরও মানক সার্ভার যুক্ত করা হচ্ছে।

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


-1

আমার মেশিনে 8 টি কোর রয়েছে। টাস্ক ম্যানেজারে আমার 60 টি প্রক্রিয়া চলছে। কিছু ভিএস এর মতো 98 টি থ্রেড ব্যবহার করে। আউটলুক 26 ব্যবহার করে I

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

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

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


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