मैं एक मल्टीथ्रेडेड प्रोजेक्ट पर काम कर रहा हूं जिसमें मुझे अपने क्लाइंट कोड के अंत प्रदर्शन को अंत करने के लिए मालिटल थ्रेड को बढ़ाने की आवश्यकता है क्योंकि मैं लोड और प्रदर्शन परीक्षण कर रहा हूं। इसलिए मैं कोड जो ExecutorService
उपयोग कर रहा है नीचे बनाया -ExectuorService बनाम ThreadPoolExecutor (जो LinkedBlockingQueue का उपयोग कर रहा है)
नीचे कोड जो ExecutorService
उपयोग कर रहा है -
public class MultithreadingExample {
public static void main(String[] args) throws InterruptedException {
ExecutorService executor = Executors.newFixedThreadPool(20);
for (int i = 0; i < 100; i++) {
executor.submit(new NewTask());
}
executor.shutdown();
executor.awaitTermination(Long.MAX_VALUE, TimeUnit.DAYS);
}
}
class NewTask implements Runnable {
@Override
public void run() {
//Measure the end to end latency of my client code
}
}
समस्या वक्तव्य: -
अब मैं इंटरनेट पर कुछ लेख पढ़ रहा था। मैंने पाया कि
ThreadPoolExecutor
भी है। तो मुझे उलझन में आया कि मुझे किस का उपयोग करना चाहिए।
अगर मैं अपने ऊपर कोड from-
ExecutorService executor = Executors.newFixedThreadPool(20);
for (int i = 0; i < 100; i++) {
executor.submit(new NewTask());
}
हैं-
BlockingQueue<Runnable> threadPool = new LinkedBlockingQueue<Runnable>();
ThreadPoolExecutor tpExecutor = new ThreadPoolExecutor(20, 2000, 0L, TimeUnit.MILLISECONDS, threadPool);
tpExecutor.prestartAllCoreThreads();
for (int i = 0; i < 100; i++) {
tpExecutor.execute(new NewTask());
}
तो है कि कोई फर्क होगा की जगह? मैं समझने की कोशिश कर रहा हूं कि मेरे मूल कोड के बीच क्या अंतर है जो ExecutorService
और नया कोड है, जिसे मैंने चिपकाया है जो ThreadPoolExectuor
का उपयोग कर रहा है? मेरे कुछ साथी साथी ने कहा कि दूसरा (थ्रेडपूलएक्सएटर) उपयोग करने का सही तरीका है?
क्या कोई मेरे लिए इस चीज़ को स्पष्ट कर सकता है? सहायता के लिए धन्यवाद।
आपने कुछ छोटे लाभ के बारे में बात की? यह सब किस बारे में हैं? और दृश्य के पीछे निष्पादकों ने ThreadPoolExecutor को सही कहा? लेकिन मेरा मानना है कि यह अनबाउंड कतार का उपयोग करता है जो मुझे लगता है कि थोड़ा धीमा है? अगर मैं ग़लत हूं तो मेरी गलती सुझाएं। –
थोड़ा लाभ यह है कि आप कन्स्ट्रक्टर तर्कों के साथ खेल सकते हैं, लेकिन आमतौर पर यह एक अच्छा विचार नहीं है। आपने एक ही असंबद्ध कतार प्रदान की है, इसलिए मुझे आपका बिंदु नहीं दिख रहा है। यदि यह धीमा था, तो डिजाइनर इसका उपयोग क्यों करेंगे? –
LinkedBoundedQueue का उपयोग करने में एक लागत है। इस तथ्य के साथ इसका कोई लेना-देना नहीं है कि यह असंबद्ध है और धागे के बीच गुजरने के कार्यों की तुलना में यह बहुत छोटा है, जो मुझे लगता है कि आप बहुत चिंतित नहीं हैं। –