Lợi ích khi sử dụng Schedulers.newThread()
và Schedulers.io()
trong yêu cầu mạng Retrofit
. Tôi đã thấy nhiều ví dụ sử dụng io()
, nhưng tôi muốn hiểu tại sao.Trang bị thêm với Rxjava Schedulers.newThread() vs Schedulers.io()
Ví dụ tình huống:
observable.onErrorResumeNext(refreshTokenAndRetry(observable))
.subscribeOn(Schedulers.newThread())
.observeOn(AndroidSchedulers.mainThread())...
vs
observable.onErrorResumeNext(refreshTokenAndRetry(observable))
.subscribeOn(Schedulers.io())
.observeOn(AndroidSchedulers.mainThread())...
Một trong những lý do tôi đã thấy là -
newThread()
tạo ra một thread mới cho mỗi đơn vị làm việc. io()
sẽ sử dụng hồ bơi chủ đề
Nhưng ảnh hưởng của đối số đó trên ứng dụng là gì? Và những khía cạnh khác có gì?
Có thể là giá trị thêm một nhận xét về Scheduler.io() được dựa trên một hồ bơi thread không bị ràng buộc có thể không phù hợp với một số trường hợp sử dụng. Xem http://stackoverflow.com/questions/31276164/rxjava-schedulers-use-cases –
@DaveMoten Trường hợp sử dụng nào không phù hợp cho nhóm luồng thông qua 'Schedulers.io'? –
Nếu bạn có nhiều công việc đồng thời để làm với 'Schedulers.io()' thì bạn có thể gặp giới hạn OS i/o (ví dụ: số lượng tệp mở tối đa, số lượng tối đa các kết nối tcp cho mục đích độ tin cậy có thể vẫn mở trong một khoảng thời gian thậm chí sau khi được xử lý). Mỗi chủ đề mới cũng yêu cầu số lượng RAM tối thiểu không nhỏ (> 512K nhưng hoạt động trên 1M) để bạn có thể hết RAM. –