আমি ভিজ্যুয়াল স্টুডিওর স্কেলগুলির সাথে সিস্টেমগুলির সাথে কাজ করার ক্ষেত্রে অভিজ্ঞদের জিজ্ঞাসা করতে চাই: এটি কী তাদের ধীর করে তোলে? কোডবেসকে মানুষের বোধগম্যতার ক্ষমতার মধ্যে রাখার জন্য কি বিমূর্ততার স্তরগুলির উপর স্তর রয়েছে? এটি কি কোডের নিখুঁত পরিমাণের মাধ্যমে চালানো দরকার? এটি কি ক্লার্ক চক্র / মেমোরি ব্যবহার বিভাগের ব্যয় (মাইন্ডবোগগ্লিংলি বিশাল) ব্যয়কে প্রোগ্রামার-সময়-সাশ্রয়ী পদ্ধতির প্রতি আধুনিক প্রবণতা?
আমি মনে করি আপনি তাদের বেশিরভাগের অনুমান করেছেন তবে আমি যুক্তিসঙ্গতভাবে বৃহত কোডবেজে কাজ করেছি (এটি ভিজ্যুয়াল স্টুডিওর মতো বড় কিনা তা নিশ্চিত নয় - লক্ষ লক্ষ কোডের লাইনে ছিল) আমি সবচেয়ে বড় ফ্যাক্টর হিসাবে বিবেচিত যা অফার করতে চাই বিভাগ এবং প্রায় এক হাজার প্লাগইন) প্রায় 10 বছর এবং পর্যবেক্ষণ ঘটনা ঘটে occur
এটি এপিআই বা ভাষার বৈশিষ্ট্য বা এর মতো কোনও কিছুর মধ্যে যায় না বলে এটিও খানিকটা কম বিতর্কিত। এগুলি "ব্যয়" এর সাথে সম্পর্কিত যা "ব্যয়" না করে বিতর্ক সৃষ্টি করতে পারে এবং আমি "ব্যয়" করার দিকে মনোনিবেশ করতে চাই।
আলগা সমন্বয় এবং উত্তরাধিকার
আমি যা পর্যবেক্ষণ করেছি তা হল আলগা সমন্বয় এবং দীর্ঘ উত্তরাধিকারের ফলে প্রচুর পরিমাণে বর্জ্য বয়ে যায়।
উদাহরণস্বরূপ, আমি এই কোডবেসে প্রায় একশ ত্বরণ কাঠামো পেয়েছি, যার মধ্যে অনেকগুলি অনর্থক।
আমরা একটি ফিজিক্স ইঞ্জিনকে ত্বরান্বিত করার জন্য কেডি ট্রি চাই, অন্য একটি নতুন পদার্থবিজ্ঞানের ইঞ্জিনের জন্য যা প্রায়শই পুরনোটির সাথে সমান্তরালে চলত, আমরা বিভিন্ন জাল অ্যালগরিদমের জন্য অজস্রের কয়েক ডজন বাস্তবায়ন করতাম, অন্য কেডি ট্রি রেন্ডারিংয়ের জন্য , বাছাই করা ইত্যাদি etc. ইত্যাদি all এগুলি অনুসন্ধানগুলিকে ত্বরান্বিত করার জন্য ব্যবহৃত সমস্ত বড়, বিশাল গাছ কাঠামো। প্রতিটি স্বতন্ত্র ব্যক্তি খুব গড় আকারের ইনপুটটির জন্য কয়েকশ মেগাবাইট মেমরি গিগা বাইটে নিতে পারেন। এগুলি সর্বদা তাত্ক্ষণিকভাবে ব্যবহার করা হয় নি এবং সর্বদা ব্যবহৃত হয় না তবে কোনও নির্দিষ্ট সময়ে 4 বা 5 টি একই সাথে স্মৃতিতে থাকতে পারে।
এখন এই সবগুলি তাদের অনুসন্ধানগুলিকে ত্বরান্বিত করতে সঠিক একই ডেটা সংরক্ষণ করছে। আপনি এটি অ্যানালজিকাল পুরাতন ডাটাবেসের মতো কল্পনা করতে পারেন যা তার সমস্ত ক্ষেত্রগুলিকে একসাথে 20 টি বিভিন্ন রিন্ডান্ট মানচিত্র / অভিধান / বি + গাছগুলিতে সংরক্ষণ করে, একই কীগুলির দ্বারা অভিন্নভাবে সংগঠিত হয় এবং সমস্ত সময় অনুসন্ধান করে। এখন আমরা 20 বার মেমরি নিচ্ছি এবং প্রক্রিয়াজাত করছি।
তদাতিরিক্ত, অতিরিক্ত অর্থহীনতার কারণে, তাদের সাথে যে কোনও রক্ষণাবেক্ষণের মূল্য ট্যাগ রয়েছে তার সাথে অপ্টিমাইজ করার খুব কম সময় নেই, এবং এমনকি যদি আমরা এটি করি তবে এটি কেবল আদর্শভাবে এটির 5% প্রভাব ফেলবে।
এই ঘটনার কারণ কী? আলগা সমন্বয়ই আমি দেখেছি এক নম্বর কারণ। টিমের সদস্যরা প্রায়শই তাদের বিচ্ছিন্ন বাস্তুসংস্থানে কাজ করে, তৃতীয় পক্ষের ডেটা স্ট্রাকচারগুলি বিকাশ করে বা ব্যবহার করে, তবে একই কাঠামোগুলি অন্য দলের সদস্যরা ব্যবহার না করে এমনকি তারা যদি একই একই উদ্বেগের সম্পূর্ণ স্পষ্ট নকল ছিল।
কী কারণে এই ঘটনা অব্যাহত থাকে? উত্তরাধিকার এবং সামঞ্জস্যতা আমি দেখেছি এক নম্বর কারণ। যেহেতু আমরা ইতিমধ্যে এই ডেটা স্ট্রাকচারগুলি বাস্তবায়নের জন্য ব্যয় করেছি এবং প্রচুর পরিমাণে কোডগুলি এই সমাধানগুলির উপর নির্ভরশীল ছিল তাই এগুলি কম ডেটা স্ট্রাকচারে একত্রীকরণ করার চেষ্টা করা খুব ঝুঁকিপূর্ণ ছিল। যদিও এর মধ্যে অনেকগুলি ডেটা স্ট্রাকচার ধারণামূলকভাবে অত্যধিক অপ্রয়োজনীয় ছিল, তারা তাদের ইন্টারফেস ডিজাইনে সর্বদা কোথাও অভিন্নতার কাছাকাছি ছিল না। সুতরাং তাদের প্রতিস্থাপন করা একটি বড়, ঝুঁকিপূর্ণ পরিবর্তন হত কেবল তাদের স্মৃতিশক্তি এবং প্রক্রিয়াজাতকরণের সময় গ্রাস করতে দেওয়ার বিপরীতে।
মেমরি দক্ষতা
সাধারণত মেমরির ব্যবহার এবং গতি কমপক্ষে বাল্ক স্তরে সম্পর্কিত হতে থাকে। আপনি প্রায়শই ধীরে ধীরে সফ্টওয়্যারটি কীভাবে মেমরিটিকে জাগিয়ে তুলছেন তা সনাক্ত করতে পারেন। এটি সর্বদা সত্য নয় যে আরও বেশি স্মৃতি মন্দার দিকে পরিচালিত করে, যেহেতু "হট" মেমরিটি কী গুরুত্বপূর্ণ (কোনও স্মৃতি সর্বদা অ্যাক্সেস করা হচ্ছে - কোনও প্রোগ্রাম যদি মেমরির একটি বোট লোড ব্যবহার করে তবে এর মধ্যে কেবল 1 মেগাবাইট সমস্ত ব্যবহৃত হয়) সময়, তারপর এটি এত বড় চুক্তি গতির ভিত্তিতে নয়)।
সুতরাং আপনি প্রচুর সময় মেমরির ব্যবহারের উপর ভিত্তি করে সম্ভাব্য হোগগুলি চিহ্নিত করতে পারেন। কোনও অ্যাপ্লিকেশন যদি শুরুতে কয়েকশ থেকে মেগাবাইট মেমরি নিয়ে নেয়, সম্ভবত এটি খুব কার্যকর হবে না। আজকাল যখন আমাদের কাছে ডিআরএএম এর গিগাবাইট থাকে তখন কয়েক মগাবাইট ছোট মনে হতে পারে তবে বৃহত্তম এবং ধীরতম সিপিইউ ক্যাশে এখনও মেসি মেগাবাইটের মধ্যে রয়েছে এবং দ্রুততম এখনও কিলোবাইটের মধ্যে রয়েছে। ফলস্বরূপ, এমন একটি প্রোগ্রাম যা কেবলমাত্র শুরু করতে এবং কিছু না করার জন্য 20 মেগাবাইট ব্যবহার করে তা আসলে হার্ডওয়্যার সিপিইউ ক্যাশে দৃষ্টিকোণ থেকে এখনও বেশ "প্রচুর" মেমরি ব্যবহার করে, বিশেষত যদি সেই মেমরির সমস্ত 20 মেগাবাইট বারবার অ্যাক্সেস করা হবে এবং প্রোগ্রাম চলমান হিসাবে প্রায়ই।
সমাধান
আমার কাছে সমাধান হ'ল পণ্যগুলি তৈরির জন্য আরও সমন্বিত, ছোট দলগুলির সন্ধান করা, যারা তাদের "ব্যয়" সম্পর্কে নজর রাখতে পারে এবং একই জিনিসগুলিকে বারবার "ক্রয়" এড়াতে পারে।
মূল্য
আমি আরও বিতর্কিত "ব্যয়" পাশের দিকে ডুবব যেখানে একটি "ব্যয়" ঘটনাটি পর্যবেক্ষণ করেছি with যদি কোনও ভাষা কোনও অবজেক্টের জন্য অনিবার্য মূল্য ট্যাগ নিয়ে আসে (যেমন একটি যা রানটাইম প্রতিবিম্ব সরবরাহ করে এবং একটি সিরিজের জন্য ধারাবাহিক বরাদ্দ জোর করতে পারে না), তবে দামের ট্যাগটি খুব দানাদার উপাদানের প্রেক্ষিতে ব্যয়বহুল, একক Pixel
বা Boolean
।
তবুও আমি প্রোগ্রামগুলির জন্য প্রচুর সোর্স কোড দেখতে পাই যা ভারী বোঝা পরিচালনা করে ( উদাহরণস্বরূপ: কয়েক হাজার থেকে কয়েক মিলিয়ন Pixel
বা Boolean
উদাহরণস্বরূপ) এমন ব্যয়বহুল স্তরে সেই মূল্য পরিশোধ করে।
অবজেক্ট-ওরিয়েন্টেড প্রোগ্রামিং এ জাতীয় প্রবণতা বাড়িয়ে তুলতে পারে। তবুও এটি প্রতি সেটের জন্য "অবজেক্টস" বা ত্রুটিযুক্ত এমনকি ওওপি-এর দাম নয়, এটি কেবলমাত্র যে লক্ষ লক্ষ লোক তাত্পর্যপূর্ণ হতে চলেছে এমন কিশোর উপাদানটির দানাদার স্তরে এই ধরনের মূল্য দেওয়া হচ্ছে।
সুতরাং এটি অন্যান্য "ব্যয়" এবং "ব্যয়" ঘটনাটি আমি পর্যবেক্ষণ করছি। ব্যয়টি পেনিগুলি হয় তবে পেনিসগুলি যোগ হয় যদি আমরা একটি বালু কেনার জন্য কোনও প্রস্তুতকারকের সাথে আলোচনার পরিবর্তে স্বতন্ত্রভাবে এক মিলিয়ন ক্যান সোডা ক্রয় করি।
আমার কাছে সমাধানটি হ'ল "বাল্ক" ক্রয়। এমনকি প্রত্যেকের কাছে কিছু অর্থের ট্যাগ রয়েছে এমন ভাষাগুলিতেও বস্তুগুলি পুরোপুরি সূক্ষ্ম হয় তবে শর্ত থাকে যে সোডা ক্যানের অ্যানালজিকাল সমতুল্যতার জন্য এই ব্যয়টি পৃথকভাবে এক মিলিয়ন গুণ বেশি দেওয়া হচ্ছে না।
অকাল অপটিমাইজেশন
এখানে ব্যবহৃত নুথ শব্দটি আমি কখনই পছন্দ করি না, কারণ "অকাল অপ্টিমাইজেশন" সত্যই বাস্তব বিশ্বের উত্পাদন প্রোগ্রামগুলিকে দ্রুততর করে তোলে। কেউ কেউ ব্যাখ্যা করেন যে "সফটওয়্যারটির প্রকৃত প্রভাব জানতে সঠিক জ্ঞান / অভিজ্ঞতা ব্যতীত অনুকূলকরণ করা" যখন নথের অর্থ "প্রাথমিকভাবে অনুকূলকরণ" হিসাবে হয়েছিল। তোমার কিছু হয়ে গেলে সত্য অকাল অপ্টিমাইজেশান ব্যবহারিক প্রভাব প্রায়ই করতে সফ্টওয়্যার যাচ্ছে ধীর , maintainability মানে অবনতি যেহেতু যে সমালোচনামূলক পাথ নিখুত সামান্য সময় সত্যিই ব্যাপার ।
এটি আমি চূড়ান্ত ঘটনাটি পর্যবেক্ষণ করেছি, যেখানে ডেভেলপাররা সোডা কিনতে পারে এমন একক ক্যান কেনার জন্য পেনিগুলি বাঁচাতে পৌঁছেছিল, আর কখনও কেনা হবে না, বা আরও খারাপ কোনও বাড়ি, তাদের সমস্ত সময় নষ্ট করে দিচ্ছে পেনিগুলিতে (বা আরও খারাপ, কাল্পনিক পেনিগুলি থেকে) তাদের সংকলক বা হার্ডওয়্যার আর্কিটেকচার বুঝতে ব্যর্থ হয়েছে) যখন কোটি কোটি ডলার অপ্রয়োজনীয়ভাবে অন্য কোথাও ব্যয় করা হয়েছিল।
সময় অত্যন্ত সীমাবদ্ধ তাই যথাযথ প্রাসঙ্গিক তথ্য না থাকলেই বিলোপগুলি অপ্টিমাইজ করার চেষ্টা করা আমাদের প্রায়শই সত্যিকার অর্থে গুরুত্বপূর্ণ যে জায়গাগুলি অনুকূল করে তোলে তা বঞ্চিত করে এবং এইভাবে ব্যবহারিক প্রভাবের ক্ষেত্রে আমি বলব যে "অকাল অপটিমাইজেশন সফ্টওয়্যারকে অনেক ধীর করে তোলে। "
সমস্যাটি হ'ল এমন বিকাশকারী প্রকার রয়েছে যারা আমার উপরের জিনিসগুলি সম্পর্কে যা লিখেছিল সেগুলি গ্রহণ করবে এবং একটি কোডিং মান স্থাপনের চেষ্টা করবে যা বস্তু-ভিত্তিক প্রোগ্রামিং বা এই ধরণের পাগল কিছুকে নিষিদ্ধ করে। কার্যকর অপ্টিমাইজেশন কার্যকর অগ্রাধিকার, এবং আমরা রক্ষণাবেক্ষণ সমস্যার সমুদ্রের মধ্যে ডুবে থাকলে এটি একেবারে মূল্যহীন।