আরটিএস-এ কুইজের প্রতিস্থাপন


12

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

এটি সিস্টেমে ওভারহেড বৃদ্ধি করে। কিউজের দক্ষ প্রতিস্থাপন কী হতে পারে ?

(আমি অনুমান করি যে এই প্রশ্নটি আমরা ব্যবহার করি আরটিওএসের স্বতন্ত্র। বেশিরভাগ আরটিওএস কেবল এইভাবে ক্যু হ্যান্ডেল করে)


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

@ এরিক: দুঃখিত! আপনার উল্লিখিত পদ্ধতিটি আমি ব্যবহার করছি .... আমি আরও কিছু বলতে চাই এবং আমি আলাদা লিখেছিলাম .... আমি এটি সম্পাদনা করব !! ভুল উল্লেখ করার জন্য ধন্যবাদ! আমি আমার কোডে সারি অ্যাক্সেসের জন্য অপেক্ষা করছি!
সোয়ানন্দ

উত্তর:


7

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

আপনি কি মেমরির একটি বাফারে ডেটা অনুলিপি করছেন তারপর কিউ উপাদানগুলির সাথে একটি পয়েন্টার দিয়ে যাচ্ছেন বা কিউ উপাদানগুলির সমস্ত ডেটা নিজেই পাস করার চেষ্টা করছেন? আপনি যদি পয়েন্টারগুলি পাস না করে থাকেন তবে সারি উপাদানগুলির মাধ্যমে একবারে একটি বাইট পাস করার পরিবর্তে আপনি পারফরম্যান্সে বৃদ্ধি পাবেন।


2
আমি একই কথা বলতে যাচ্ছিলাম। যদি আপনি সারিগুলিতে কেবলমাত্র ডাটাগুলিতে পয়েন্টারগুলি পাস করেন তবে আপনি গতি বাড়াতে পারবেন তবে নিশ্চিত করুন যে আপনি দুটি থ্রেড ব্যবহার করে ডেটা ব্যবহার এবং পরিবর্তন করার চেষ্টা করছেন না।
কর্টুক

@ কর্টুক যেমন বলেছিলেন, আমার "এটি নিশ্চিত করা দরকার যে আপনি দুটি থ্রেড ব্যবহার করে ডেটা ব্যবহার এবং পরিবর্তন করার চেষ্টা করছেন না" ... যার অর্থ ওভারহেড বৃদ্ধি ... আমি বেশি প্রসেসিং চাই না! :(
সোয়ানন্দ

সুতরাং কুইজের জন্য এমন প্রতিস্থাপনের মতো নেই ... ডেটা ক্যুয়ের পরিবর্তে আমার পয়েন্টার কুইউ ব্যবহার করা দরকার!
সোয়ানন্দ

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

7

একটি সহজ উপায় হ'ল সারিতে থাকা ডেটাতে একটি পয়েন্টার লাগানো এবং পয়েন্টারটি ব্যবহার করে ডেটা গ্রাস করা।

মনে রাখবেন যে আপনি পারফরম্যান্সের জন্য সুরক্ষাটি এভাবে বাণিজ্য করছেন যেহেতু আপনাকে নিশ্চিত করতে হবে:

  1. গ্রাহক তথ্য গ্রহণ না করা অবধি বাফারটি বৈধ থাকবে
  2. কেউ বাফার deallocates

আপনি যদি গতিশীল বরাদ্দ মেমরিটি ব্যবহার না করে থাকেন তবে আপনাকে এটিকে হ্রাস করতে হবে না, তবে আপনাকে এখনও নিশ্চিত করতে হবে যে ডেটা গ্রাস করার আগে মেমরি অঞ্চলটি পুনরায় ব্যবহার করা হবে না।


6

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

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

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

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


1
আমি এটি +1 করতে যাচ্ছিলাম, তবে আপনি ভুল: একাধিক পাঠক এবং লেখকের জন্য লক-মুক্ত সারিগুলি প্রয়োগ করা সম্ভব, এগুলি আরও জটিল। (লক-ফ্রি কুইউসে মাইকেল + স্কটের কাগজটি দেখুন google.com/search?q=michael%20scott%20queue )
জেসন এস

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

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

2

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


1

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

চিয়ার্স !!


1

সারিগুলি সহজাতভাবে ধীর হয় না। বাস্তবায়ন তাদের হতে পারে।

যদি আপনি অন্ধভাবে ডেটা অনুলিপি করে এবং সিঙ্ক্রোনাস সারি ব্যবহার করেন তবে আপনি একটি পারফরম্যান্স হিট দেখতে যাচ্ছেন।

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

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


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

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