আমি গত 15 বছরে বহুবার হেরলিহ এবং উইংকে পুনরায় পাঠ করেছি। এটি একটি খুব কঠিন পড়া। এবং এটি দুর্ভাগ্যজনক, কারণ প্রান্তগুলির চারপাশে কিছু সূক্ষ্মতা থাকা সত্ত্বেও মূল ধারণাটি বেশ যুক্তিসঙ্গত।
সংক্ষেপে: লিনিয়ারাইজিবিলিটি সিরিয়ালাইজিবিলিটির মতো, তবে অতিরিক্ত প্রয়োজনীয়তার সাথে ক্রমিকায়নের মাধ্যমে লেনদেনের মধ্যে অতিরিক্ত ক্রম সীমাবদ্ধতা সম্মান করা হয়। লক্ষ্যটি হ'ল একসাথে পুরো সিস্টেমটি সম্পর্কে একবার যুক্তিযুক্ত না হয়ে পৃথক পারমাণবিক ডেটা কাঠামো সম্পর্কে কঠোর যুক্তি দিয়ে আপনাকে অনুমতি দেওয়া।
লিনিয়ারাইজিবিলিটি অর্জন করা সহজ: আপনি লাইনারিাইজ করতে চান সেই বস্তুর সাথে কেবল একটি মিটেক্সকে যুক্ত করুন। সেই বস্তুর প্রতিটি লেনদেন মিউটেক্সকে লক করে শুরু হয় এবং মিউটেক্সকে আনলক করে শেষ করে।
এখানে আমি সংজ্ঞাগুলি ব্যবহার করব:
কোনও সিস্টেমে সিরিয়ালেজাইবিল দেওয়া হয় যদি কোনও সংকলনের উপর ভিত্তি করে লেনদেনের একটি সেট দেওয়া হয়, লেনদেনগুলি কার্যকর করার যে কোনও ফলাফল একইভাবে হয় যদি লেনদেনটি কিছু অনুক্রমিক ক্রমে সম্পাদিত হয় এবং প্রতিটি লেনদেনের মধ্যে ক্রিয়াকলাপগুলি তাদের লেনদেনের মধ্যে ক্রমে অন্তর্ভুক্ত থাকে লেনদেনের কোড দ্বারা নির্দিষ্ট
সিরিয়ালিজেবিলিটি বিভিন্ন লেনদেনের মধ্যে ক্রিয়াকলাপকে ইন্টারলিভিংয়ের উপস্থিতি অস্বীকার করে এবং প্রয়োজন হয় যে লেনদেনের নির্বাচিত ক্রম কার্যকারিতা সন্তুষ্ট করে (যদি লেনদেন এ মান x লিখে দেয়, এবং লেনদেন বি এ দ্বারা লিখিত মান x পড়ে, তবে লেনদেনের এ অবশ্যই লেনদেনের বি এর আগে থাকতে হবে) নির্বাচিত ক্রমিক ক্রম।) তবে এটি লেনদেনের ক্রম সম্পর্কিত কোনও বাধা সম্পর্কে কিছুই বলে না (বিশেষত, এটি প্রক্রিয়াগুলি এবং ক্রমগুলি যে প্রক্রিয়াগুলিতে ঘটনাগুলি উপলব্ধি করে তা সম্পর্কে কিছুই বলে না ))
সম্পর্কিত আরও একটি ধারণা রয়েছে যা ক্রমান্বয়ে পরিচালিত ক্রিয়াকলাপগুলি (তবে কেবল স্বতন্ত্র পঠন / লেখার ক্রিয়াকলাপের বিষয়ে লেনদেনের বিষয়ে কথা বলেন না):
কোনও সিস্টেমের ক্রমগতভাবে সামঞ্জস্য হয় যদি কোনও কার্যকরকরণের ফলাফল একই হয় যদি সমস্ত প্রক্রিয়াগুলির ক্রিয়াকলাপটি কিছু অনুক্রমিক ক্রমে সম্পাদিত হয় এবং প্রতিটি পৃথক প্রক্রিয়ার ক্রিয়াকলাপগুলি তার প্রোগ্রাম দ্বারা নির্দিষ্ট ক্রমে এই ক্রমটিতে প্রদর্শিত হয়। ( ল্যাম্পোর্ট, "মাল্টিপ্রসেসার কম্পিউটারগুলি কীভাবে সঠিকভাবে মাল্টিপ্রসেস প্রোগ্রামগুলি কার্যকর করতে পারে", আইইইই টি কম্প 28: 9 (690-691), 1979 )।
ক্রম ধারাবাহিকতার সংজ্ঞায় অন্তর্নিহিত হ'ল আমরা কেবল অনুক্রমিক অর্ডারগুলি গ্রহণ করি যেখানে প্রতিটি মেমরি অবস্থানের জন্য (অবজেক্ট) অপারেশনগুলির অনুপ্রেরণামূলক ক্রম ক্রমটি সেই নিয়ম মেনে চলে যে প্রতিটি পাঠ অপারেশন দ্বারা লোকেশনে ফিরিয়ে দেওয়া মান x
অবশ্যই একই মান দ্বারা লেখা হয়েছিল তাত্ক্ষণিক x
ক্রম অনুসারে লেখার অপারেশনটি পূর্ববর্তী স্থানে ।
লিনিয়ারাইজিবিলিটির (ক) লেনদেনের ধারণাকে (সিরিয়ালাইজেশন থেকে) একত্রিত করার ধারণার সাথে ভাল ধারণা রয়েছে যা তারা প্রবর্তন করে যে ক্রিয়াকলাপগুলি যথাযথভাবে সম্পন্ন হবে আশা করে (ধারাবাহিক ধারাবাহিকতা থেকে) এবং (খ) প্রতিটি বিষয়ে কথা বলার জন্য নির্ভুলতার মানদণ্ডকে সংকুচিত করে সামগ্রিকভাবে আপনাকে সিস্টেম সম্পর্কে তর্ক করতে বাধ্য করার পরিবর্তে বিচ্ছিন্নতায় আপত্তি করুন। (আমি এটি বলতে সক্ষম হতে চাই যে এমন একটি সিস্টেমেও আমার অবজেক্টের বাস্তবায়ন সঠিক, যেখানে অন্যান্য অবজেক্টগুলি লিনিয়ারাইজযোগ্য নয়। এমনকি আমি বিশ্বাস করি যে হেরলিহি এবং উইং সম্ভবত একটি মনিটরকে কঠোরভাবে সংজ্ঞায়িত করার চেষ্টা করছেন) ।
অংশ (ক) "সহজ": একটি ক্রমিক ধারাবাহিকতার মতো প্রয়োজনীয়তা হ'ল প্রতিটি প্রক্রিয়া দ্বারা জারি করা অবজেক্টের লেনদেনগুলি প্রোগ্রাম দ্বারা নির্দিষ্ট আদেশ অনুসারে ফলাফলের ক্রম হিসাবে উপস্থিত হয়। সিরিয়ালাইজেশন-এর মতো প্রয়োজনীয়তাটি হ'ল বস্তুর লেনদেনগুলি সমস্ত পারস্পরিক একচেটিয়া (সিরিয়ালায়িত করা যেতে পারে)।
জটিলতাটি উদ্দেশ্য থেকে আসে (খ) (প্রতিটি বস্তুর সম্পর্কে স্বতন্ত্রভাবে অন্য সকলের সাথে কথা বলতে সক্ষম হওয়া)।
একাধিক অবজেক্টের সিস্টেমে এটি সম্ভব যে অবজেক্ট বিয়ের ক্রিয়াকলাপগুলি ক্রমটিকে সীমাবদ্ধ করে যেখানে আমরা বিশ্বাস করি যে বস্তু এ-তে ক্রিয়াকলাপ আহ্বান করা হয়েছিল আমরা যদি পুরো সিস্টেমের ইতিহাসের দিকে তাকিয়ে থাকি তবে আমরা কিছু নির্দিষ্ট ক্রমিক অর্ডারে সীমাবদ্ধ থাকব এবং অন্যকে প্রত্যাখ্যান করা দরকার। তবে আমরা একটি সঠিকতার মানদণ্ড চেয়েছিলাম যা আমরা বিচ্ছিন্নভাবে ব্যবহার করতে পারি (বৈশ্বিক সিস্টেমের ইতিহাসের কাছে আবেদন না করেই আপত্তি কাকে কী ঘটবে তা নিয়ে যুক্তি দিয়ে)।
উদাহরণস্বরূপ: ধরুন আমি বস্তুর A এর সঠিকতা সম্পর্কে তর্ক করার চেষ্টা করছি যা একটি সারি, মনে করুন অবজেক্ট বি একটি মেমরি অবস্থান, এবং ধরুন আমার নীচের সম্পাদনের ইতিহাস রয়েছে: থ্রেড 1: এএনকিউ (এক্স), এ। dequeue () (রিটার্ন y) থ্রেড 2: এ। এনকিউ (y), এ। ডেকিউ () (রিটার্ন এক্স)। এমন কোনও ইভেন্টের ইন্টারলিভিং রয়েছে যা কিউয়ের এই বাস্তবায়নটিকে সঠিক হতে দেবে? হ্যাঁ:
Thread 1 Thread 2
A.enqueue(x) ...
... A.enqueue(y)
... A.dequeue() (returns x)
A.dequeue(y) (returns y) ...
তবে এখন যদি ইতিহাস ( অবজেক্ট বি সহ ) হয় তবে বিটি 0 মান দিয়ে শুরু হয় Th থ্রেড 1: এ। এনকিউ (এক্স), এডেকিউ () (রিটার্ন y), বি রাইট (1)। থ্রেড 2: বিড্রেড () (রিটার্ন 1) এ। এনেকিউ (y), এ। ডেকিউ () (রিটার্ন এক্স)
Thread 1 Thread 2
A.enqueue(x) ...
A.dequeue() (returns y) ... (uh oh!)
B.write(1) ...
... B.read() (returns 1)
... A.enqueue(y)
... A.dequeue() (returns x)
এখন আমরা আমাদের "নির্ভুলতার" সংজ্ঞাটি বলতে চাই যে এই ইতিহাসটি ইঙ্গিত দেয় যে হয় হয় আমাদের এ প্রয়োগ বাস্তবায়ন বগী বা বি এর বাস্তবায়ন বগি, কারণ এমন কোনও সিরিয়ালাইজেশন নেই যা "বোধগম্য" হয় (হয় থ্রেড 2 পড়তে হবে বি থেকে একটি মান যা এখনও লেখা হয়নি, বা থ্রেড 1 এ এর থেকে এমন একটি মান সন্ধান করা দরকার যা এখনও সন্ধান করা হয়নি।) সুতরাং যখন আমাদের A তে লেনদেনের মূল সিরিয়ালাইজেশন একটি যুক্তিসঙ্গত বলে মনে হয়েছিল, যদি আমাদের বাস্তবায়ন হয় দ্বিতীয়টির মতো ইতিহাসের অনুমতি দেয়, তবে এটি পরিষ্কারভাবে ভুল is
সুতরাং লিনিয়ারীকরণগুলি যে সীমাবদ্ধতাগুলি যুক্ত করে তা যথেষ্ট যুক্তিসঙ্গত (এবং এমনকি ফিফোর সারিগুলির মতো সাধারণ ডেটা স্ট্রাকচারের জন্যও প্রয়োজনীয় They ভবিষ্যত। " লিনিয়ারাইজিবিলিটি অর্জন করা বেশ সহজ (এবং প্রাকৃতিক): কেবল আপনার অবজেক্টের সাথে একটি মিটেক্সকে যুক্ত করুন এবং প্রতিটি লেনদেন লক করে শুরু হয় এবং আনলক করে শেষ হয়। লিনিয়ারাইজিবিলিটি সম্পর্কে যুক্তিযুক্ত কৌশলটি জটিল হয়ে উঠতে শুরু করে যখন আপনি সাধারণ মুটেক্সের পরিবর্তে অ-ব্লকিং বা লক-ফ্রি বা অপেক্ষা-মুক্ত কৌশলগুলি দিয়ে আপনার পারমাণবিকতা বাস্তবায়নের চেষ্টা করছেন।
আপনি যদি সাহিত্যের কিছু পয়েন্টারগুলিতে আগ্রহী হন তবে আমি নিম্নলিখিতটি পেয়েছি (যদিও আমি মনে করি "রিয়েল-টাইম" সম্পর্কে আলোচনাটি এমন একটি লাল-হার্চিংগুলির মধ্যে একটি যা লিনিয়ারীযাবিলিটিকে এটির প্রয়োজনের তুলনায় আরও কঠিন করে তোলে)) https: // stackoverflow.com/questions/4179587/difference-between-linearizability-and-serializability