eventnext
是.net core
下的乙個事件驅動的應用框架,通過它**建立的介面行為都是通過事件驅動的模式進行呼叫.由於eventnext
的所有呼叫都是基於事件佇列來進行,所以在資源控制上非常方便;它可以進行多樣性的執行緒分配,其中actor
應用就是它的一種基礎實現;在新的版中eventnext
增加了乙個新的特性就是執行緒容器,通過執行緒容器可以讓n個類的行為在指定執行緒資源下執行。接來詳細分析這個功能的應用。
eventnext的所有任務都在由佇列接管,但它實現的佇列和平常的佇列有所不同;eventnext的事件驅動隊要求所有任務都用非同步描述,它的特點是由上乙個任務的完成來驅動下一下任務,不像同步處理佇列在處理非同步的時候不得不做執行緒等待。為了達到非同步任務的要求介面的所有方法必須定義task作為返回值(暫不支援屬性處理)。
元件提供乙個eventnext.getthreadcontainer
方法來獲取乙個執行緒容器,方法有兩個引數,乙個是容器的名稱和對應容器的執行緒數量;當容器被建立後內部的執行緒數量不變,具體**如下:
var tc = eventcenter.getthreadcontainer("t1");
以上是獲取乙個名稱為t1
的執行緒容器,在不指定執行緒數的情況下為乙個執行緒處理。接下來就可以通過容器建立相應的介面例項:
var account = tc.create();
以上是建立乙個iaccount
的例項,這個例項不管在多少個執行緒下呼叫最終都由t1
這個執行緒容器去執行處理;每個容器可以建立多個接例項。
[service(typeof(iaccount))]
public
class
accountimpl : iaccount
public
async task income(string name, int
value)
public
async task value(string
name)
}
以上是針對乙個redis
操作的實現,主要存在io操作更容易測試到容器在不同執行緒下的差異。
為了測試容器的效果,使用了不同的方式進行測試,分別是:不用執行緒容器和使用不同執行緒數的容器,測試**如下:
staticasync task none(int
count)
);tasks.add(t);
}await
task.whenall(tasks);
var value = await account.value("
ken"
); console.writeline($
"none use time: ms");
}
staticasync task threads(int threads, int
count)
",threads);
var account = tc.create();
list
tasks = new list();
var now =beetlex.timewatch.getelapsedmilliseconds();
for (int i = 0; i < 20; i++)
);tasks.add(t);
}await
task.whenall(tasks);
var value = await account.value("
ken"
); console.writeline($
" thread use time: ms");
}
staticasync
void
test()
}
test...none use time:1231 ms
1 thread use time:3479 ms
2 thread use time:2025 ms
4 thread use time:1208 ms
test...
none use time:1246 ms
1 thread use time:3358 ms
2 thread use time:2025 ms
4 thread use time:1179 ms
test...
none use time:1344 ms
1 thread use time:3385 ms
2 thread use time:1954 ms
4 thread use time:1187 ms
test...
none use time:1210 ms
1 thread use time:3338 ms
2 thread use time:1933 ms
4 thread use time:1181 ms
預設情況下元件會針對請呼叫進行乙個執行緒分配,這個分配機制依據佇列的負載情況進行分配呼叫;執行緒容器則會根據當前容器的執行緒數來進行乙個平均分配處理,從測試結果可以看到不同執行緒數下完成所需要的時間。
事件驅動框架EventNext之執行緒容器
eventnext是.net core下的乙個事件驅動的應用框架,通過它 建立的介面行為都是通過事件驅動的模式進行呼叫.由於eventnext的所有呼叫都是基於事件佇列來進行,所以在資源控制上非常方便 它可以進行多樣性的執行緒分配,其中actor應用就是它的一種基礎實現 在新的版中eventnext...
python事件驅動框架 Python幾種主流框架
從github中整理出的15個最受歡迎的python開源框架。這些框架包括事件i o,olap,web開發,高效能網路通訊,測試,爬蟲等。django python web應用開發框架 django 應該是最出名的python框架,gae甚至erlang都有框架受它影響。django是走大而全的方向...
基於C 11的事件驅動框架
嵌入式開發中對資源是有嚴格的要求的,在學校的時候一直使用qt,可是qt庫越來越大,在一些低端的嵌入式裝置上,我們可能只是簡單的幾個介面。這裡我想基於opengl開發乙個簡單的程式框架,用來開速開發嵌入式系統應用。本專案現在已經實現了事件迴圈系統,並且可以正常工作。小弟第一次搭建ui框架,可是資料太少...