Retrofit
नेटवर्क अनुरोध में Schedulers.io()
का उपयोग करने के क्या फायदे हैं। मैंने कई उदाहरण देखे हैं जो io()
का उपयोग करते हैं, लेकिन मैं समझना चाहता हूं क्यों।Rxjava Schedulers.newThread() बनाम Schedulers.io()
उदाहरण स्थिति:
observable.onErrorResumeNext(refreshTokenAndRetry(observable))
.subscribeOn(Schedulers.newThread())
.observeOn(AndroidSchedulers.mainThread())...
बनाम
observable.onErrorResumeNext(refreshTokenAndRetry(observable))
.subscribeOn(Schedulers.io())
.observeOn(AndroidSchedulers.mainThread())...
कारणों मैंने देखा है में से एक है -
newThread()
काम की प्रत्येक इकाई के लिए एक नया धागा बनाता है। io()
एक थ्रेड पूल
का उपयोग करेगा लेकिन ऐप पर उस तर्क का प्रभाव क्या है? और क्या अन्य पहलू हैं?
एक के आधार पर किया जा रहा Scheduler.io() के बारे में एक टिप्पणी जोड़ने के लायक हो सकता है असंबद्ध थ्रेड पूल जो कुछ उपयोग मामलों के लिए उपयुक्त नहीं हो सकता है। देखें http://stackoverflow.com/questions/31276164/rxjava-schedulers-use-cases –
@ डेवमोटेन 'शेड्यूलर्स.ओ' के माध्यम से थ्रेड पूल के लिए केस का उपयोग अनुचित क्यों है? –
यदि आपके पास 'Schedulers.io()' के साथ बहुत अधिक समवर्ती काम है तो आप ओएस i/o सीमाओं में टक्कर डाल सकते हैं (उदाहरण के लिए खुली फाइलों की अधिकतम संख्या, टीसीपी कनेक्शन की अधिकतम संख्या जो विश्वसनीयता के उद्देश्यों के लिए खुली रह सकती है निपटान के बाद भी एक अवधि के लिए)। प्रत्येक नए धागे को न्यूनतम गैर-तुच्छ राशि की आवश्यकता होती है (> 512 के लेकिन 1 एम पर काम) ताकि आप रैम से बाहर हो सकें। –