1樓:碼神手記
典型的IO優化場景,核心思想是減少IO次數,提高並行度。
方法如下:
1、合併可以合併的請求,減少請求次數。
2、利用執行緒池,多個請求並行發起。注意設定超時時間,避免慢請求耗盡執行緒資源。
3、快取可以快取的資料,減少請求次數。
4、使用支援非同步化、NIO、多路復用的網路請求元件。比如基於netty的方案。
曾經用過乙個叫Vert.x的開發框架,非常適合IO密集場景,可以了解下。
2樓:
這裡有2個思路:
1.先看多次請求能否合併?
比如資料庫請求或者讓對方api支援批量呼叫2.如果請求無法合併,讓多次請求併發呼叫,最後總的介面響應時間約等於所有api裡最慢的那個,而不是所有api耗時累加。
這一點可以使用callable來實現
3樓:
上面很多人都有很好的解決方法了,例如修改api支援批處理啊,非同步啊之類的。
我有乙個比較簡單的方法:可以用parallelStream來遍歷,httpclient連線池來請求。
4樓:
好問題,第一看單個元素的介面能否盡可能的快,類似ping -t,第二看能否介面直接支援list,並且list介面也盡可能的快,最後再考慮執行緒非同步什麼的吧
5樓:
要看資料依賴性.
for迴圈中每一輪迭代是否用到上一輪中的結果了? for迴圈之後的邏輯是不是都強依賴for迴圈的結果?
6樓:朱涵俊
應該修改程式設計,改成非同步方式。多執行緒也是一種方案,但是消耗比較高。
比如for迴圈傳送100個檔案。
for (i=0;i<100;i++)sendfile(files[i]);
如果用同步,是乙個個傳送的,效率比較低,而且會卡住執行緒。
int done=0;
for(i=0;i<100;i++) {
sendfile_aio(files,ret=>{if (++done)==100)callback(done);
7樓:林咖啡
1.單步變批量
2.同步變異步
3.cache是萬能藥
具體一點來說就是,看能否使用下游服務的批量獲取介面,減少io次數;如果請求之間沒有依賴,使用執行緒池非同步的發起請求,用Future收集所有結果;如果請求結果是冪等的,可以考慮加個快取,下次就可以一次獲取;
Java裡乙個執行緒呼叫了Thread interrupt 到底意味著什麼?
快樂心靈知識站 有乙個很重要的事情,在Android 中會有點特殊,正常情況下,當執行緒中的run方法執行完畢後,執行緒是會自動關閉,不需要我們手動去關閉的。如 new Thread new Runnable start 而當run方法中的操作會不斷迴圈執行時如 newThread new Runn...
如何用asterisk搭建乙個呼叫中心?
PiGc 題目雖然簡單,但是實施起來是有難度的。題主應該需要的是乙個撥出型的呼叫中心。1.Asterisk 裡面提供SIP賬號,users.conf 和 sip.conf 需要配置。這一塊更多的是 Asterisk 設定。2.配置extensions.conf 裡面的撥號規則可以實現不同的撥出規則,...
這是乙個bug嗎 JAVA?
equals引數是乙個Object,首先判斷傳入是否為null,是null就直接返回false了,是判斷是否是同一物件的。 物件的值是空和空物件是不同的。比如String s null s是乙個引用,指向空物件。String s s是乙個引用,指向物件 只不過物件的值為空而已。兩者是不同的,乙個是空...