事件驅動框架EventNext之執行緒容器

2021-10-01 19:40:09 字數 2483 閱讀 4470

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 taskvalue(string name)

}

以上是針對乙個redis操作的實現,主要存在io操作更容易測試到容器在不同執行緒下的差異。

為了測試容器的效果,使用了不同的方式進行測試,分別是:不用執行緒容器和使用不同執行緒數的容器,測試**如下:

static async task none(int count)

);tasks.add(t);

}await task.whenall(tasks);

var value = await account.value("ken");

console.writeline($"none use time: ms");

}

static async task threads(int threads, int count)

",threads);

var account = tc.create();

listtasks = 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");

}

static async 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框架,可是資料太少...