লক-ফ্রি সংগ্রহে সীমাবদ্ধতা?


10

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

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

আমি কোনও রূপান্তর আশা করি না।


1
একজন অ-বিশেষজ্ঞ হিসাবে আমি ভাবছি যে "লক-ফ্রি" কঠোরভাবে সংজ্ঞায়িত করা যায় কিনা।
সোসোশি ইটো

1
@ সুরেশ: সম্ভবত "ডেটা স্ট্রাকচার" এর প্রতিশব্দ?
Tsuyoshi Ito

2
আপনি যদি কেবলমাত্র এসটিএমের একটি লক-ফ্রি বাস্তবায়ন গ্রহণ করেন (সফ্টওয়্যার লেনদেনের মেমরি) এবং তার উপরে কোনও ডেটা স্ট্রাকচার প্রয়োগ করেন?
Jukka Suomela

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

1
যতদূর আমি এটি বুঝতে পারি, লক-ফ্রি এখানে অ-ব্লক করার সমার্থক হিসাবে বোঝা যাচ্ছে। এতে সিপিইউর LOCKনির্দেশনা জড়িত না তবে থ্রেড শিডিয়ুলার, মাইটেক্সেস / সেম্যাফোরাস / ইত্যাদির মাধ্যমে।
এমসাল্টাররা

উত্তর:


11

যেহেতু আমি নিজেই কিছুটা বিভ্রান্ত ছিলাম তাই আমি প্রশ্নে কয়েকটি ধারণা পরিষ্কার করে শুরু করি।

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

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

এই সংজ্ঞাটি সহ, আমি হারেলিহী এবং বস মূলত বলেছি যে উত্তরটি গুরুত্বপূর্ণ অঞ্চলগুলিকে লেনদেনে রূপান্তরিত করে।

তবে, আপনি জিজ্ঞাসা করতে পারেন, এর কি একই জটিলতা আছে? আমি নিশ্চিত না যে প্রশ্নটি বোঝা যায়। বিবেচনা করুন push(x) { lock(); stack[size++] = x; unlock(); }। এটি কি স্থির সময়ের অপারেশন? আপনি যদি লকিং অপারেশন এবং অন্য ব্যবহারকারীদের উপেক্ষা করেন তবে আপনি হ্যাঁ উত্তর দিতে পারেন। আপনি যদি অন্য ব্যবহারকারীদের উপেক্ষা করতে চান না, তবে ধ্রুবক সময়ে ধাক্কা চলবে কিনা তা বলার সত্যিই উপায় নেই is আপনি যদি এক স্তর উপরে যান এবং দেখুন যে স্ট্যাকটি কোনও নির্দিষ্ট অ্যালগরিদম দ্বারা কীভাবে ব্যবহৃত হয়, তবে আপনি বলতে সক্ষম হবেন যে ধাক্কা সবসময় ধ্রুবক সময় নেয় (আপনার প্যারালাল অ্যালগরিদমের ইনপুট হিসাবে যাই ঘটুক না কেন পরিমাপে এটি মাপা হয়)। কিন্তু যে সত্যিই তাই এটি অর্থে দেখা যায় না বলতে চাই যে, আপনার আলগোরিদিম একটি সম্পত্তি ধাক্কা হয় একটি ধ্রুবক সময় অপারেশন।

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


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

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

ঠিক আছে, মেমরি অ্যাক্সেস এটি একটি সাধারণ ঘটনা। বেশিরভাগ অ্যালগরিদম বিশ্লেষণ ধরে নেওয়া হয় যে মেমরি অ্যাক্সেসটি ব্যবহৃত মেমরির চেয়ে ও (1) স্বতন্ত্র; রিয়েল মেমরি আর্কিটেকচার (ক্যাশে ইত্যাদির সাথে) ও (লগ এন) দ্বারা আরও ভাল আনুমানিক যেখানে এন মেমরি ব্যবহৃত হয়।
এমসাল্টারস 31:25

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

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

3

আমি মনে করি যে "সংগ্রহগুলি" "সারি, স্ট্যাকস, লিঙ্কযুক্ত তালিকাগুলি, গাছ, ..." এর জন্য দাঁড়িয়েছে think

Http://www.cl.cam.ac.uk/research/srg/netos/lock-free/ থেকে

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

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

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

হে()

বিষয়টিতে ক্লান্তিকর ডকুমেন্টেশনগুলি অনলাইনে পাওয়া যাবে:

http://www.google.it/search?q=lock+free+algorithm+filetype%3Apdf

(... এবং প্রতিটি নথির শেষে আরও উল্লেখ)

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