অ-কার্যকরী ভাষায় অবিরাম ডেটা স্ট্রাকচারের ব্যবহার


17

যে ভাষাগুলি নিখুঁতভাবে কার্যকরী হয় বা অবিচ্ছিন্নভাবে নিখুঁতভাবে কার্যকরী হয় সেগুলি স্থায়ী ডাটা স্ট্রাকচার থেকে উপকারে আসে কারণ এগুলি অপরিবর্তনীয় এবং কার্যক্ষম প্রোগ্রামিংয়ের স্টেটলেস স্টাইলে ভাল ফিট করে।

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

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

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

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


3
আপনি "অবিচলিত" বলতে থাকুন। আপনি কি "প্রোগ্রামটির পুনরায় আরম্ভ থেকে বাঁচতে সক্ষম" হিসাবে "অবিচল" বা "সৃষ্টির পরে কখনও পরিবর্তন হয় না" হিসাবে কেবল "অপরিবর্তনীয়" বলতে চান?
কিলিয়ান ফট

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

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

আমার ভুল. আমি জানতাম না যে "ধ্রুবক ডেটা স্ট্রাকচার" একটি প্রযুক্তিগত শব্দ যা কেবল অধ্যবসায় থেকে পৃথক।
কিলিয়ান ফট

@ ডেলান হ্যাঁ এটি সঠিক।
রায় তোয়াল

উত্তর:


15

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

একটি থ্রেড টি 1 বিবেচনা করুন যা একটি সেট এসকে অন্য থ্রেড টি 2 তে পাস করে। যদি এস পরিবর্তনীয় হয়, টি 1 এর একটি সমস্যা রয়েছে: এটি এস এর সাথে যা ঘটে তার নিয়ন্ত্রণ হারিয়ে ফেলে টি থ্রেড টি 2 এটি সংশোধন করতে পারে, তাই টি 1 এস এর সামগ্রীতে সম্পূর্ণ নির্ভর করতে পারে না এবং বিপরীতে - টি 2 টি এটি নিশ্চিত হতে পারে না যে টি 1 টি টি 2 এটি পরিচালনা করার সময় এসগুলিকে সংশোধন করে না।

একটি সমাধান টি 1 এবং টি 2 এর যোগাযোগের সাথে একরকম চুক্তি যুক্ত করা যাতে থ্রেডগুলির মধ্যে কেবল একটিকে এসটি সংশোধন করার অনুমতি দেওয়া হয় এটি ত্রুটিযুক্ত এবং নকশা এবং বাস্তবায়ন উভয়ই বোঝা করে ens

অন্য সমাধানটি হ'ল টি 1 বা টি 2 ডেটা স্ট্রাকচারের ক্লোন করে (বা তাদের উভয়ই যদি তারা সমন্বিত না হয়)। তবে এস যদি অবিচল না থাকে তবে এটি একটি ব্যয়বহুল হে (এন) অপারেশন।

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

আরও দেখুন: অবিচ্ছিন্ন বনাম অপরিবর্তনীয় ডেটা কাঠামো


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

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

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

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

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

5

তা হলে, পিডিএসের অপরিবর্তনীয়তা "থ্রেড সুরক্ষা" এর জন্য উপকারী কিছু হিসাবে বিবেচিত হয় কেন? এমন কোনও বাস্তব উদাহরণ রয়েছে যেখানে পিডিএসগুলি সমন্বয়সাধন, বা একত্রে সমস্যা সমাধানে সহায়তা করে?

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


2

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

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

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

ডেটা স্ট্রাকচারের অপরিবর্তনীয়তা থ্রেড সুরক্ষার সাথে সম্পর্কিত অংশ। তাদের অধ্যবসায় (নতুন কাঠামো তৈরি হওয়ার সময় বিদ্যমান অংশগুলির পুনরায় ব্যবহার) এই জাতীয় সংগ্রহগুলির সাথে কাজ করার সময় দক্ষতার সাথে প্রাসঙ্গিক। যেহেতু এগুলি অপরিবর্তনীয়, তাই কোনও আইটেম যুক্ত করার মতো ক্রিয়াকলাপ বিদ্যমান কাঠামোটিকে সংশোধন করে না তবে অতিরিক্ত উপাদান যুক্ত করে একটি নতুন ফিরিয়ে দেয়। যদি প্রতিবার পুরো কাঠামো অনুলিপি করা হয়, খালি সংগ্রহের সাথে শুরু করে এবং 1000 উপাদান উপাদান সংগ্রহ শেষ করতে একের পর এক 1000 উপাদান যুক্ত করে, 0 + 1 + 2 + ... + 999 = দিয়ে অস্থায়ী বস্তু তৈরি করতে পারে 500000 উপাদান মোট যা একটি বিশাল অপচয় হবে। অবিরাম ডেটা স্ট্রাকচারের সাহায্যে এটি এড়ানো যায় কারণ 1-উপাদান সংগ্রহটি 2-উপাদান একটিতে পুনরায় ব্যবহৃত হয়, যা 3-উপাদান এক এবং আবার ব্যবহৃত হয়,


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

0

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

এই সরলবহুল সি ++ উদাহরণটি নিন (সেখানকার কোনও চিত্র প্রসেসিং বিশেষজ্ঞের সামনে নিজেকে বিব্রত করা এড়াতে সরলতার জন্য স্বীকৃতভাবে স্বীকৃত নয়):

// Inputs an image and outputs a new one with the specified size.
Image resized_image(const Image& src, int new_w, int new_h)
{
     Image dst(new_w, new_h);
     for (int y=0; y < new_h; ++y)
     {
         for (int x=0; x < new_w; ++x)
              dst[y][x] = src.sample(x / (float)new_w, y / (float)new_h);
     }
     return dst;
}

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

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

বিশুদ্ধতা

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

হেফটি স্ট্রাকচারের সস্তা কপি করা

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

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

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

অপরিবর্তনীয়তা

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

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

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

অবশেষে:

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

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

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

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