因為最近工作的關係,要把非同步任務從應用伺服器中拆分到專門的非同步處理伺服器中.
是採用mq的方式將任務訊息發出,在服務端進行處理,如下圖所示:
這種方案是採用mq作為中間的媒介,在服務端採用執行緒池非同步處理任務,處理完成之後將結果傳送到mq中,客戶端採用偵聽的方式得到結果繼續進行處理。
這種方案的不足是,可能在某些需求的情況下,需要將結果存放到共享的hashmap或者threadlocal中進行存放結果,客戶端會一直阻塞,直到得到結果,從多執行緒的角度來說,還是用了共享變數,雖然共享變數可能是執行緒安全的,但是從併發模型的角度來講,並不是乙個最好的方式。採用比較流行的akka框架來實現。
akka的五大特性
因為之前一直研究scala,scala的多執行緒處理的效能是非常高的,那基於scala語言而開發出來的akka框架得到了廣泛使用。那麼接下來我將使用乙個非常簡單的例子,以及一些測試用例展現一下它的效能。
**如下:
import akka.actor.actorref;
import akka.actor.actorsystem;
import akka.actor.props;
import akka.actor.untypedactor;
/** * project_name: akkademo
* date: 16/2/27
* create by: chao.cheng
**/public
class
tostringactor
extends
untypedactor
catch (exception e)
}public
static
void
main
(string args)
system.out.println("[結束]********************===");}}
程式的簡單說明:
採用事件的機制,迴圈傳送一千萬條資料,通過onreceive方法非同步處理任務。
用visualvm工具截圖可以看到:
後台其實自適應只起了三個執行緒在執行,分別是dispatcher-2,dispatcher-3,dispatcher-4。
正在分析效能耗時。
伺服器整體cpu佔比時間為15.9%。
Akka效能測試
akka承諾高併發。那麼有什麼更好的方式來模擬呢?讓它處理1000萬資訊花費多少時間,使用普通硬體和軟體並且沒有任何低階別的微調。這個例子使用akka產生1000萬條資訊,計算處理它們所花費的時間。該程式演示了路由的概念,roundrobinrouter是用於將負載分發到一組worker工作者上面,...
簡單的測試框架
使用註解來寫乙個計算器類的測試框架 public class calculator 減法 check public void sub 乘法 check public void mul 除法 check public void div public void show target elementty...
手機的效能測試分析
進入年,國產手機廠商利空訊息頻頻傳來,這和市場格局變化導致國產手機廠商在原先的一些渠道 品種等方面的優勢逐漸喪失有關,但是還有乙個不容忽視的原因是國產手機的質量問題過多,產品穩定性差,突出的問題有 自動關機 宕機 掉線 通話質量差 雜音大等。這些問題中的大部分都是可以通過充分的效能測試 來避免或減少...