हां, बशर्ते काम CPU bound नहीं, blocking I/O हो। server और सारे task executors को हर task पर एक वर्चुअल थ्रेड बनाने वाले executor पर बदलें, फिर वे मान्यताएं हटाएं जो पुराना pool दे रहा था: semaphores या connection pools से downstream कनकरेंसी पर साफ हदें लगाएं, उन synchronized blocks और native calls की जांच करें जो carrier को pin कर सकते हैं, और thread local का इस्तेमाल देखें। इसे किसी flag के पीछे धीरे धीरे चालू करें और throughput तथा tail latency की तुलना करें।
इंटरव्यूअर यह क्यों पूछते हैं
यह वर्चुअल थ्रेड्स वाले सवाल का व्यावहारिक रूप है, और इससे पता चलता है कि आप समझते हैं या नहीं कि सीमित pool चुपचाप आपके लिए क्या कर रहा था। इंटरव्यूअर कनकरेंसी की हद वाली बात, pinning की जांच और नापी हुई रोलआउट चाहते हैं, न कि एक झटके में पूरी अदला बदली। यह पहचानना कि CPU bound services को कुछ नहीं मिलता, दिखाता है कि आप इसे जादुई अपग्रेड नहीं मान रहे।
अपना जवाब कैसे स्ट्रक्चर करें
- फैसले पर शर्त लगाएं: blocking I/O हां, CPU bound नहीं।
- executor और server की थ्रेड सेटिंग बदलें।
- पुराना pool जो हदें चुपचाप लगा रहा था, उन्हें साफ तौर पर वापस लाएं।
- pinning और thread local भारी कोड की जांच करें, फिर नापें।
उदाहरण जवाब
अगर थ्रेड्स ज्यादातर HTTP या डेटाबेस calls का इंतजार करते पड़े रहते हैं, तो हां, क्योंकि दो सौ थ्रेड्स का मतलब दो सौ कनकरेंट requests भी है, और बाकी सब उनके पीछे कतार में लगता है। बदलाव खुद छोटा है: web server को वर्चुअल थ्रेड्स पर चलाएं और task executors को ऐसे executor से बदलें जो हर task पर एक वर्चुअल थ्रेड बनाए। असली काम वहां है जो pool चुपचाप कर रहा था। वह कनकरेंसी की हद था, तो उसके हटते ही अचानक दस हजार requests पचास connections वाले pool से डेटाबेस पर टूट सकती हैं, और thread pool पर कतार की जगह मुझे connection pool पर timeouts मिलते हैं। इसलिए मैं साफ हदें वहीं वापस लगाता हूं जहां वे होनी चाहिए, आमतौर पर हर downstream dependency पर सोच समझकर sized एक semaphore। फिर मैं pinning की जांच करता हूं, जो नई versions में काफी कम दिक्कत है क्योंकि synchronized अब pin नहीं करता, पर native calls अब भी करती हैं। मैं यह भी देखता हूं कि कोई thread local कुछ बड़ा तो नहीं पकड़े है, क्योंकि हर थ्रेड का cache दो सौ थ्रेड्स पर ठीक था, एक लाख पर नहीं। फिर मैं flag के पीछे ट्रैफिक बढ़ाता हूं और सिर्फ throughput नहीं, tail latency देखता हूं।
जल्दी ही यह इंटरव्यू देने जा रहे हैं? GhostPilot आपकी लाइव कॉल सुनता है, सवाल पूछे जाते ही उसे पकड़ लेता है, और रियल-टाइम में एक स्ट्रक्चर्ड जवाब आपकी स्क्रीन पर डाल देता है। अगले मॉक में इसे आजमाएं, या ले लें एक $29 Session Pass, कोई सब्सक्रिप्शन नहीं, असली इंटरव्यू के लिए।
देखें यह कैसे काम करता हैफॉलो-अप सवाल जिनकी उम्मीद रखें
- चालू application में आप pinning कैसे पकड़ते हैं?
- दस लाख थ्रेड्स होने पर thread local की जगह क्या लेता है?
- किसी downstream service के लिए आप semaphore का साइज कैसे तय करेंगे?
Java डेवलपर के और सवाल
आपका इंटरव्यूअर इसका अपना वर्ज़न पूछेगा। फ्री Question Predictor में अपना असली जॉब डिस्क्रिप्शन पेस्ट कीजिए और वो 20 सवाल पाइए जो उस रोल में सबसे ज्यादा पूछे जाने की संभावना है, साथ में यह भी कि हर सवाल असल में क्या टटोल रहा है।
मेरे सवाल प्रेडिक्ट करें