কিছুক্ষণের জন্য, আমি বহুবিবাহিত পরিবেশে এইচটিপিপ্লিনেন্ট ব্যবহার করছি। প্রতিটি থ্রেডের জন্য, যখন এটি কোনও সংযোগ শুরু করে, এটি সম্পূর্ণ নতুন HttpClient উদাহরণ তৈরি করবে।
সম্প্রতি, আমি আবিষ্কার করেছি যে, এই পদ্ধতির ব্যবহারের ফলে এটি ব্যবহারকারীর অনেক বেশি পোর্ট খোলা হতে পারে এবং বেশিরভাগ সংযোগগুলি TIME_WAIT অবস্থায় রয়েছে।
http://www.opensubscriber.com/message/commons-httpclient-dev@jakarta.apache.org/86045.html
সুতরাং, প্রতিটি থ্রেডের পরিবর্তে:
HttpClient c = new HttpClient();
try {
c.executeMethod(method);
}
catch(...) {
}
finally {
method.releaseConnection();
}
আমাদের রয়েছে পরিকল্পনা:
[পদ্ধতি A]
// global_c is initialized once through
// HttpClient global_c = new HttpClient(new MultiThreadedHttpConnectionManager());
try {
global_c.executeMethod(method);
}
catch(...) {
}
finally {
method.releaseConnection();
}
একটি সাধারণ পরিস্থিতিতে, বিশ্বব্যাপী_c একযোগে 50 ++ থ্রেড দ্বারা অ্যাক্সেস করবে। আমি ভাবছিলাম, এটি কি কোনও পারফরম্যান্স সমস্যা তৈরি করবে? মাল্টিথ্রেডড এইচটিটিপি সংযোগ ম্যানেজারটি এর থ্রেড নিরাপদ নীতি বাস্তবায়নের জন্য লক-মুক্ত প্রক্রিয়া ব্যবহার করছে?
যদি 10 টি থ্রেড বিশ্বব্যাপী_ ব্যবহার করে থাকে তবে অন্য 40 টি থ্রেড লক হয়ে যাবে?
অথবা এটি আরও ভাল হবে যদি প্রতিটি থ্রেডে, আমি কোনও এইচটিপিপ্লিয়েন্টের উদাহরণ তৈরি করি তবে সংযোগ ব্যবস্থাপককে স্পষ্টভাবে প্রকাশ করি?
[পদ্ধতি বি]
MultiThreadedHttpConnectionManager connman = new MultiThreadedHttpConnectionManager();
HttpClient c = new HttpClient(connman);
try {
c.executeMethod(method);
}
catch(...) {
}
finally {
method.releaseConnection();
connman.shutdown();
}
সংযুক্তি.শটডাউন () পারফরম্যান্সের সমস্যায় ভুগবে?
50 ++ থ্রেড ব্যবহারের জন্য অ্যাপ্লিকেশনের জন্য কী পদ্ধতি (A বা B) ভাল তা আমি জানতে পারি?