এটি একটি অদ্ভুত প্রশ্ন হিসাবে শোনায়, তবে আমার বিভাগে আমরা নিম্নলিখিত পরিস্থিতি নিয়ে সমস্যায় পড়েছি:
আমরা এখানে একটি সার্ভার অ্যাপ্লিকেশন নিয়ে কাজ করছি যা বড় এবং বৃহত্তর বৃদ্ধি পাচ্ছে এমনকি এমন সময়েও যে আমরা এটিকে বিভিন্ন অংশে (ডিএলএল ফাইল) বিভক্ত করার কথা ভাবছি, যখন প্রয়োজন হয় তখন গতিশীলভাবে লোড করা হয় এবং পরে লোড করা হয়, যাতে হ্যান্ডেল করতে সক্ষম হয় কর্মক্ষমতা সমস্যা।
তবে: আমরা যে ফাংশনগুলি ব্যবহার করছি, তা এসটিএল অবজেক্ট হিসাবে ইনপুট এবং আউটপুট প্যারামিটারগুলি পার করছে এবং স্ট্যাক ওভারফ্লো উত্তরে উল্লিখিত হিসাবে , এটি খুব খারাপ ধারণা। (পোস্টটিতে কয়েকটি ± সমাধান এবং হ্যাকস রয়েছে তবে এটি সবগুলি খুব শক্ত লাগে না))
স্পষ্টতই আমরা ইনপুট / আউটপুট পরামিতিগুলিকে স্ট্যান্ডার্ড সি ++ টাইপ দ্বারা প্রতিস্থাপন করতে পারি এবং ফাংশনের অভ্যন্তরে একবারে এসটিএল অবজেক্ট তৈরি করতে পারি, তবে এটি পারফরম্যান্স ড্রপের কারণ হতে পারে।
আপনি যদি কোনও অ্যাপ্লিকেশন তৈরির বিষয়ে বিবেচনা করছেন, তবে এটি একক পিসি আর পরিচালনা করতে পারে না এমনটি বড় হতে পারে, এই সিদ্ধান্তে পৌঁছানো কি ঠিক আছে, আপনার অবশ্যই কোনও প্রযুক্তি হিসাবে এসটিএল ব্যবহার করা উচিত নয়?
এই প্রশ্নটির আরও পটভূমি: প্রশ্নটি সম্পর্কে
কিছু ভুল ধারণা রয়েছে বলে মনে হচ্ছে: সমস্যাটি হ'ল:
আমার অ্যাপ্লিকেশনটি এর কাজ শেষ করার জন্য বিশাল পরিমাণে পারফরম্যান্স (সিপিইউ, মেমরি) ব্যবহার করছে এবং আমি এই কাজটি বিভক্ত করতে চাই বিভিন্ন অংশে (প্রোগ্রামটি ইতিমধ্যে একাধিক ফাংশনে বিভক্ত হয়ে গেছে), আমার অ্যাপ্লিকেশনটি থেকে কিছু ডিএলএল তৈরি করা এবং সেই ডিএলএলগুলির রফতানি টেবিলের কিছু ফাংশন স্থাপন করা এতটা কঠিন নয়। এটি নিম্নলিখিত পরিস্থিতিতে ফলাফল করবে:
+-----------+-----------+----
| Machine1 | Machine2 | ...
| App_Inst1 | App_Inst2 | ...
| | |
| DLL1.1 | DLL2.1 | ...
| DLL1.2 | DLL2.2 | ...
| DLL1.x | DLL2.x | ...
+-----------+-----------+----
App_Inst1 হ'ল মেশিন 1 এ ইনস্টল হওয়া অ্যাপ্লিকেশনটির উদাহরণ, অন্যদিকে অ্যাপ_ইনস্ট 2 মেশিন 2 এ ইনস্টল হওয়া একই অ্যাপ্লিকেশনটির উদাহরণ।
DLL1.x হ'ল একটি ডিএলএল, মেশিন 1 এ ইনস্টল করা হয়, এবং ডিএলএল 2.x একটি ডিএলএল, মেশিন 2 এ ইনস্টল করা হয়।
ডিএলএলএক্স .১ এক্সপোর্ট করা ফাংশন 1 coversেকে রাখে।
ডিএলএলএক্স.২ এক্সপোর্ট করা ফাংশন 2 coversেকে রাখে।
এখন মেশিন 1 এ আমি ফাংশন 1 এবং ফাংশন 2 চালাতে চাই। আমি জানি যে এটি মেশিন 1 ওভারলোড করবে, তাই আমি অ্যাপ্লিকেশন 2-এ একটি বার্তা প্রেরণ করতে চাই, সেই অ্যাপ্লিকেশনটিকে ফাংশন 2 সম্পাদন করতে বলছি।
ফাংশন 1 এবং ফাংশন 2 এর ইনপুট / আউটপুট প্যারামিটারগুলি হ'ল এসটিএল (সি ++ স্ট্যান্ডার্ড টাইপ লাইব্রেরি) অবজেক্টস এবং নিয়মিত আমি গ্রাহককে অ্যাপ_আইএনএসটি 1, অ্যাপ_ইনস্ট 2, ডিএলএলএক্স.আই এর আপডেটগুলি করার আশা করতে পারি (তবে তাদের সবকটিই নয়, গ্রাহক মেশিন 1 আপগ্রেড করতে পারে তবে মেশিন 2 নয়, বা কেবল অ্যাপ্লিকেশনগুলি আপগ্রেড করুন তবে ডিএলএল বা বিপরীতে নয়, ...)। স্পষ্টতই যদি ইন্টারফেস (ইনপুট / আউটপুট পরামিতি) পরিবর্তন হয় তবে গ্রাহক সম্পূর্ণ আপগ্রেড করতে বাধ্য হন।
তবে, উল্লেখ করা স্ট্যাকওভারফ্লো ইউআরএল হিসাবে উল্লিখিত হিসাবে, অ্যাপ_আইএনএসটি 1 বা ডিএলএলগুলির মধ্যে একটির একটি পুনরায় সংকলন পুরো সিস্টেমটিকে বিচ্ছিন্ন করে দিতে পারে, অতএব এই পোস্টের আমার মূল শিরোনাম, এসটিএল (সি ++ স্ট্যান্ডার্ড টেম্পলেট) ব্যবহারের পরামর্শ দিতে পরামর্শ দিচ্ছে না বড় অ্যাপ্লিকেশন জন্য লাইব্রেরি)।
আমি আশা করি এর মাধ্যমে আমি কিছু প্রশ্ন / সন্দেহ দূর করেছি।