將網絡操作和解析分離到單獨的線程中可以獲得好處嗎?我意識到兩者都應該在非UI線程上執行;那不是我的問題。聯網操作是否應該在網絡線程上運行,然後將數據傳遞給解析線程進行解析?在單獨的線程上進行網絡操作和解析
這裏有一些權衡,我看到:
親
- 這兩種類型的操作不能阻止對方
- 這兩種類型的操作可以放在(?)在單獨的線程池中並單獨調諧
con
- 上下文切換會引入一些延遲
- 更多的線程,更復雜的
- 流解析變得困難/不可能
將網絡操作和解析分離到單獨的線程中可以獲得好處嗎?我意識到兩者都應該在非UI線程上執行;那不是我的問題。聯網操作是否應該在網絡線程上運行,然後將數據傳遞給解析線程進行解析?在單獨的線程上進行網絡操作和解析
這裏有一些權衡,我看到:
親
con
你幾乎回答了自己的問題。除非你正在執行的解析需要很長時間,否則真的不會。網絡操作幾乎總是會成爲應用程序的瓶頸,所以考慮一下你正在執行的處理是否會削減寶貴的時間,以便線程可以從互聯網下載。
對於分析需要幾毫秒到幾毫秒的大量應用程序,我沒有看到與用戶有很大差異。如果你的解析需要相當長的時間,你可以創建一個單獨的線程來解析,就像你說的,並且在它們之間創建一個生產者/消費者關係。這會給你的應用程序增加很多複雜性,除非你已經執行某種分析來確定這是一個問題,否則我認爲它不值得。
確保您沒有對應用程序進行過早優化,並且已經對其進行了配置(或確切知道)以確定這是否有必要。 :)
謝謝,這是關於我的想法是在哪裏。我只是需要一些確認。 –
我認爲,只有當您需要在解析「prev」數據的同時下載「下一個」數據時,纔可以使用解析線程......在其他情況下,如同時解析/同時(流解析器)作爲下載網絡線程應該足夠 – Selvin
imo,這取決於要解析的數據的影響。根據我的經驗,如果與需要下載數據的時間相比較,解析複雜json的影響是微不足道的。 – Blackbelt
@Selvin好的一點,我已經添加了解析流的難點/不可能 –