ভাগ করা মালিকানা খুব কমই সংবেদন করে
এই উত্তরটি সামান্য অফ-স্পর্শকাতর হতে পারে, তবে আমাকে জিজ্ঞাসা করতে হবে, মালিকানা ভাগ করে নেওয়ার জন্য এটি কতগুলি ক্ষেত্রে ব্যবহারকারীর সমাপ্তি থেকে বিবেচনা করে ? কমপক্ষে আমি যে ডোমেনগুলিতে কাজ করেছি সেগুলিতে ব্যবহারিকভাবে কিছুই ছিল না কারণ অন্যথায় এটি বোঝায় যে ব্যবহারকারীর কেবল এক জায়গা থেকে একবারে কিছু সরানোর দরকার নেই, তবে উত্সটি বাস্তবে আসার আগে স্পষ্টভাবে এটি সমস্ত প্রাসঙ্গিক মালিকদের কাছ থেকে মুছে ফেলা উচিত actually সিস্টেম থেকে অপসারণ করা হয়েছে।
এটি অন্য একটি থ্রেডের মতো অন্য কিছুতে এখনও অ্যাক্সেস থাকা অবস্থায় সম্পদগুলি ধ্বংস হওয়া থেকে রোধ করার জন্য প্রায়শই নিম্ন-স্তরের ইঞ্জিনিয়ারিং ধারণা। প্রায়শই যখন ব্যবহারকারী সফ্টওয়্যার থেকে কোনও কিছু বন্ধ / অপসারণ / মুছে ফেলার অনুরোধ করেন, তা যত তাড়াতাড়ি সম্ভব মুছে ফেলা উচিত (যখনই এটি অপসারণ করা নিরাপদ) এবং এটি অবশ্যই দীর্ঘস্থায়ী হওয়া উচিত নয় এবং যতক্ষণ না রিসোর্স ফাঁস হওয়া উচিত অ্যাপ্লিকেশন চলছে।
উদাহরণস্বরূপ, একটি ভিডিও গেমের একটি গেম অ্যাসেট মেটেরিয়াল লাইব্রেরির কোনও উপাদানকে রেফারেন্স করতে পারে। আমরা অবশ্যই বলতে চাই না, একটি জটলা পয়েন্টার ক্র্যাশ যদি উপাদানটি একটি থ্রেডে উপাদান লাইব্রেরি থেকে সরানো হয় এবং অন্য থ্রেড এখনও গেম অ্যাসেট দ্বারা রেফারেন্সযুক্ত উপাদানটিতে অ্যাক্সেস করে থাকে। তবে এর অর্থ এই নয় যে গেমের সম্পদের জন্য তারা যে সামগ্রীগুলি লাইব্রেরির সাথে উল্লেখ করেছে তার মালিকানা ভাগ করে নেওয়া কোনও অর্থবোধ করে না । আমরা ব্যবহারকারীকে সম্পদ এবং উপাদান উভয় গ্রন্থাগার থেকে স্পষ্টতই উপাদানটি সরিয়ে দিতে বাধ্য করতে চাই না। আমরা কেবল এটি নিশ্চিত করতে চাই যে উপাদানগুলি অ্যাক্সেস শেষ না করা অবধি উপাদানগুলির একমাত্র বুদ্ধিমান মালিক ম্যাটারিয়াল লাইব্রেরি থেকে পদার্থগুলি সরানো হবে না।
রিসোর্স লিক
তবুও আমি একটি প্রাক্তন টিমের সাথে কাজ করেছি যা সফ্টওয়্যারটির সমস্ত উপাদানগুলির জন্য জিসি গ্রহণ করেছিল। এবং যখন এটি সত্যই নিশ্চিত করতে সাহায্য করেছিল যে আমাদের কখনই সম্পদ ধ্বংস হয় নি যখন অন্যান্য থ্রেডগুলি সেগুলি অ্যাক্সেস করে চলেছিল, আমরা পরিবর্তে আমাদের অংশটি রিসোর্স লিকের অংশীদার হয়ে শেষ করেছি ।
এবং এগুলি এমন এক ধরণের ক্ষুদ্র রিসোর্স লিক ছিল না যা কেবল বিকাশকারীদেরকে বিরক্ত করে, যেমন এক কিলোবাইট মেমরির এক ঘন্টা দীর্ঘ সেশনের পরে ফাঁস হয়েছিল। এগুলি মহাকাব্যিক ফাঁস ছিল, প্রায়শই একটি সক্রিয় অধিবেশনে গিগাবাইটের স্মৃতি থাকে যা বাগ রিপোর্টের দিকে নিয়ে যায়। কারণ এখন যখন সিস্টেমের 8 টি বিভিন্ন অংশের মধ্যে কোনও উত্সের মালিকানা উল্লেখ করা হয় (এবং সেইজন্য মালিকানাতে ভাগ করা হয়), তখন এটির জন্য অপসারণের অনুরোধকারীর প্রতিক্রিয়া হিসাবে রিসোর্সটি অপসারণ করতে ব্যর্থ হতে কেবল একজনের দরকার পড়ে ফাঁস এবং সম্ভবত অনির্দিষ্টকালের জন্য।
সুতরাং আমি কখনই জিসি বা রেফারেন্স গণনার কোনও বিশাল অনুরাগী হইনি কারণ কোনও ফাঁকা সফ্টওয়্যার তৈরি করতে তারা এটিকে কতটা সহজ করেছিল of এর আগে কী এমন ঝুঁকিপূর্ণ পয়েন্টার ক্র্যাশ হত যা খুব কঠিন সনাক্তকরণের রিসোর্সের ফাঁকে পরিণত হয় যা সহজেই পরীক্ষার রাডারের নিচে উড়তে পারে detect
দুর্বল রেফারেন্সগুলি ভাষা / গ্রন্থাগার এগুলি সরবরাহ করে তবে এই সমস্যাটি হ্রাস করতে পারে, তবে যখনই উপযুক্ত হবে মিশ্র দক্ষ দক্ষতার সেটগুলির বিকাশকারীদের একটি দলকে ধারাবাহিকভাবে দুর্বল রেফারেন্সগুলি ব্যবহার করতে সক্ষম হওয়া আমার পক্ষে পাওয়া কঠিন ছিল। এবং এই অসুবিধাটি কেবলমাত্র অভ্যন্তরীণ দলের সাথে সম্পর্কিত ছিল না, তবে আমাদের সফ্টওয়্যারটির প্রতিটি প্লাগইন বিকাশকারীকেই ছিল। তারাও সহজে কোনও উপায়ের জন্য ক্রমাগত কোনও রেফারেন্স সংরক্ষণ করে সিস্টেমে সহজেই রিসোর্সেস ফাঁস করে দিতে পারে যার ফলে অপরাধীর হিসাবে প্লাগইনে ফিরে যাওয়া মুশকিল হয়ে পড়েছিল, তাই আমরা আমাদের সফ্টওয়্যার রিসোর্সগুলির ফলে বাগ রিপোর্টগুলিতেও আমাদের সিংহের অংশ পেয়েছি got কেবল ফাঁস হওয়া কারণ একটি প্লাগইন যার উত্স কোডটি আমাদের নিয়ন্ত্রণের বাইরে ছিল those ব্যয়বহুল সংস্থানগুলির জন্য রেফারেন্স প্রকাশ করতে ব্যর্থ হয়েছিল।
সমাধান: স্থগিত, পর্যায়ক্রমিক অপসারণ
সুতরাং আমার সমাধানটি পরে যা আমি আমার ব্যক্তিগত প্রকল্পগুলিতে প্রয়োগ করেছিলাম যা আমাকে উভয় পৃথিবীর কাছ থেকে পাওয়া সেরা ধরণের ধারণা দিয়েছে তা হল এই ধারণাটি দূর করা referencing=ownership
কিন্তু এখনও সম্পদের ধ্বংস স্থগিত করা হয়েছে।
ফলস্বরূপ, এখন যখনই ব্যবহারকারী এমন কিছু করেন যার ফলে কোনও উত্স অপসারণের প্রয়োজন হয়, কেবলমাত্র সংস্থানটি সরানোর ক্ষেত্রে এপিআই প্রকাশ করা হয়:
ecs->remove(component);
... যা খুব সোজা উপায়ে ব্যবহারকারীর শেষ যুক্তিকে মডেল করে। তবে, যদি তাদের প্রক্রিয়াজাতকরণের পর্যায়ে অন্যান্য সিস্টেমে থ্রেড থাকে যেখানে তারা একই উপাদান একই সাথে অ্যাক্সেস করতে পারে তবে এখনই উত্স (উপাদান) এখনই সরানো যাবে না।
সুতরাং এই প্রক্রিয়াজাতকরণ থ্রেডগুলি এখানে সময় দেয় এবং সেখানে কোনও থ্রেড দেয় যা একটি জঞ্জাল সংগ্রহকারীটির মতো হয়ে জেগে ওঠে এবং " বিশ্বকে থামিয়ে দেয় " এবং সমস্ত সংস্থানগুলি ধ্বংস করে দেয় যা সেই উপাদানগুলি প্রক্রিয়াজাতকরণ থেকে থ্রেড লক করার সময় অপসারণের অনুরোধ করা হয়েছিল যতক্ষণ না এটি শেষ হয় until । আমি এটি টিউন করেছি যাতে এখানে কাজ করার প্রয়োজনের পরিমাণটি সাধারণত ন্যূনতম হয় এবং ফ্রেমের হারগুলিতে লক্ষণীয়ভাবে কাটা যায় না।
এখন আমি বলতে পারি না এটি কিছু পরীক্ষিত এবং পরীক্ষিত এবং ভাল-নথিভুক্ত পদ্ধতি, তবে এটি এমন কিছু যা আমি কয়েক বছর ধরে ব্যবহার করে আসছি যার কোনও মাথাব্যথা নেই এবং কোনও সংস্থান নেই। আমি যখন আপনার আর্কিটেকচারের পক্ষে এই ধরণের সম্মতিযুক্ত মডেলটি ফিট করা সম্ভব হয় তখন এ জাতীয় পদ্ধতির অন্বেষণ করার পরামর্শ দিই কারণ এটি জিসি বা রেফ-গণনার তুলনায় অনেক কম ভারী হাতে রয়েছে এবং পরীক্ষার রাডারে এই ধরণের রিসোর্স লিকগুলি ঝুঁকিপূর্ণ নয়।
আমি যেখানে রেফ-কাউন্টিং বা জিসি দরকারী হিসাবে খুঁজে পেয়েছি তা স্থির ডাটা স্ট্রাকচারের জন্য। সেক্ষেত্রে এটি ডেটা স্ট্রাকচার অঞ্চল, ব্যবহারকারীর শেষের উদ্বেগগুলি থেকে অনেক বেশি তালাকপ্রাপ্ত, এবং সেখানে প্রকৃতপক্ষে প্রতিটি অপরিবর্তনীয় অনুলিপিটি একই অপরিবর্তিত তথ্যের মালিকানা ভাগ করে নেওয়ার পক্ষে এটি অর্থবোধ করে।