আপনার কখন "কয়েক হাজার" থ্রেডের প্রয়োজন হবে?


31

এরলং, গো এবং মরিচা সমস্ত দাবি করে যে কোনও উপায়ে তারা সস্তা "থ্রেড" / কর্টাইন সহ সমবর্তী প্রোগ্রামিং সমর্থন করে। যান প্রায়শই জিজ্ঞাসিত প্রশ্নাবলী পদ বলে:

একই ঠিকানার জায়গাতে কয়েক হাজার হাজার গোরটাইন তৈরি করা কার্যকর।

মরচে টিউটোরিয়াল বলেছেন:

যেহেতু .তিহ্যবাহী থ্রেডগুলির তুলনায় কার্যগুলি তৈরি করতে উল্লেখযোগ্যভাবে সস্তা, মরচে একটি সাধারণ 32-বিট সিস্টেমে কয়েক লক্ষ সহস্র কাজগুলি তৈরি করতে পারে।

এরলংয়ের ডকুমেন্টেশন বলে:

২৩৩ শব্দের ডিফল্ট প্রাথমিক স্তূপ আকার কয়েক হাজার বা এমনকি কয়েক মিলিয়ন প্রক্রিয়া সহ এরলং সিস্টেমগুলিকে সমর্থন করার জন্য যথেষ্ট রক্ষণশীল।

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


5
আমি মনে করি আপনার বিভ্রান্তির উত্সটি হ'ল: এই মাইক্রোথ্রেড / টাস্কগুলি / ইত্যাদি মূলত আপনি যে ওএস থ্রেড / প্রক্রিয়াগুলির বিষয়ে কথা বলছেন সেগুলির বিকল্প হিসাবে নয়, এগুলি বোঝা যাচ্ছে না যে সংখ্যার ক্রাঞ্চিংয়ের সহজেই সমান্তরাল বিরাট অংশকে বিভক্ত করার জন্য ব্যবহার করা হবে কয়েকটি কোরের মধ্যে (যেমনটি আপনি সঠিকভাবে মন্তব্য করেছেন, সেই উদ্দেশ্যে 4 টি কোরের 100k থ্রেড থাকার কোনও অর্থ নেই)।
us2012

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

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

5
কাজের ভিত্তিক asynchrony বনাম থ্রেড ভিত্তিক asynchrony ধারণা বলতে চাই যে ব্যবহারকারী কোড মনোযোগ উচিত কাজগুলো ঘটতে প্রয়োজন যে বদলে শ্রমিকদের পরিচালনার সেই কর্ম সঞ্চালন। আপনি যে ভাড়াটে শ্রমিক হিসাবে থ্রেডটি ভাবেন; একজন কর্মী নিযুক্ত করা ব্যয়বহুল, এবং যদি আপনি এটি করেন তবে আপনি চান 100% সময় যতটা সম্ভব কাজে নিয়োজিত করুন। প্রচুর সিস্টেমে কয়েকশো বা হাজার হাজার মুলতুবি থাকা কাজ হিসাবে চিহ্নিত করা যেতে পারে তবে আপনার শত বা হাজার হাজার শ্রমিকের প্রয়োজন নেই।
এরিক লিপার্ট

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

উত্তর:


19

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

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


15

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

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

এই নিবন্ধটি আরও সাহায্য করতে পারে।


11

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

এই ইরং ফাংশনটি বিবেচনা করুন, যা একটি পাল্টা রক্ষণাবেক্ষণ করে:

counter(Value) ->
    receive                               % Sit idle until a message is received
        increment -> counter(Value + 1);  % Restart with incremented value
        decrement -> counter(Value - 1);  % Restart with decremented value
        speak     ->
            io:fwrite("~B~n", [Value]),
            counter(Value);               % Restart with unaltered value
        _         -> counter(Value)       % Anything else?  Do nothing.
    end.

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

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


1
আপনার সর্বশেষ অ্যাপ্লিকেশনটি counter/1ছোট হাতের সি ব্যবহার করা উচিত;) আমি এটিকে ঠিক করার চেষ্টা করেছি, কিন্তু স্ট্যাক এক্সচেঞ্জটি 1-অক্ষর সম্পাদনা পছন্দ করে না।
d11wtq

4

আমার প্রশ্ন: কোন ধরণের প্রয়োগের জন্য মৃত্যুদন্ড কার্যকর করার জন্য এতগুলি সামঞ্জস্যপূর্ণ থ্রেড প্রয়োজন?

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

2) অনুরোধ প্রতি এক গরোটিন কেবল শুরু। অভ্যন্তরীণভাবে গোরোটিনগুলি ব্যবহার করার প্রচুর কারণ রয়েছে।

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

থ্রেড / প্রসেসের সংখ্যা শারীরিক কোরের সংখ্যার চেয়ে অনেক বেশি হলে হ্রাস হ্রাসকারী রিটার্নগুলি হিট করুন

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

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

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

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


2

এরলংয়ের জন্য সংযোগ বা অন্য কাজ অনুসারে একটি প্রক্রিয়া করা সাধারণ। সুতরাং উদাহরণস্বরূপ স্ট্রিমিং অডিও সার্ভারে সংযুক্ত ব্যবহারকারীর জন্য 1 টি প্রক্রিয়া থাকতে পারে।

এরেলং ভিএম প্রসঙ্গের স্যুইচগুলি খুব সস্তা করে হাজার হাজার বা এমনকি কয়েক হাজার প্রক্রিয়া পরিচালনা করতে অনুকূলিত হয়েছে।


1

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


1

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

অভ্যন্তরীণভাবে কোনও বড় সংস্থার দ্বারা তাদের অর্ডারগুলি হ্যান্ডেল করার জন্য বা তাদের যা প্রয়োজন প্রয়োজন হতে পারে সেগুলি ব্যবহার করুন। ওয়েব সার্ভারগুলি কেবল থ্রেডের প্রয়োজন হয় না।


-2

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


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

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