介紹
Akka.NET是一套開源的,用于設計跨處理器和網絡的可擴展系統。 Akka.net 允許您專注于滿足業務需求,而不用去編寫底層代碼來保證系統的性能。
本測試用例用于收集Akka.net單機版,在不同硬件環境下的表現。
軟件平臺
- dotnet core 2.2 & C# 7.3
- Akka.net 1.3.13
測試代碼
using Akka.Actor;
using System;
using System.Collections.Generic;
using System.Threading.Tasks;
namespace AkkaTest
{
class Program
{
static async Task Main(string[] args)
{
// Create a new actor system (a container for your actors)
var system = ActorSystem.Create("MySystem");
int clientCount = 10;
var greeter = system.ActorOf<GreetingActor>("greeter");
// Create your actor and get a reference to it.
List<Task<(long m, int cout)>> tasks = new List<Task<(long m, int cout)>>(clientCount);
for (int i = 0; i < clientCount; i++)
{
tasks.Add(Run(greeter));
}
double allm = 0.0;
double count = 0.0;
foreach (var item in tasks)
{
var r = await item;
if (r.m == 0) //出錯了客戶端數量-1
clientCount--;
allm += r.m;
count += r.cout;
}
Console.WriteLine(count + "/" + (allm / clientCount));
float mc = (float)(count / (allm / clientCount));
float sc = mc * 1000;
Console.WriteLine(sc + " TPS");
Console.ReadLine();
}
private static async Task<(long m, int count)> Run(IActorRef greeter)
{
try
{
int count = 10000;
int p = 0;
var stop = System.Diagnostics.Stopwatch.StartNew();
while (p < count)
{
//Ask測試
//await greeter.Ask(new GreetingMessage());
//Tell測試
greeter.Tell(new GreetingMessage());
p++;
}
stop.Stop();
Console.WriteLine($"我調用了{count} 用了{stop.ElapsedMilliseconds}毫秒");
return (stop.ElapsedMilliseconds, count);
}
catch (Exception e)
{
Console.WriteLine(e);
return (0, 0);
}
}
}
public class GreetingMessage
{
}
public class GreetingActor : TypedActor, IHandle<GreetingMessage>
{
public void Handle(GreetingMessage message)
{
Sender.Tell("OK");
}
}
}
測試環境
樹莓派 3B+ 4C1G / Raspbian
Ask
Tell
J3455/4G RAM / Ubuntu 18.04
Ask
Tell
I5 7400 3.0GHz /16G RAM / Windows 10
Ask
Tell