public Task Initialize(IPongGrain actor, long repeats) { this.actor = actor; this.repeats = repeats; return(TaskDone.Done); }
public Task Init(IPongGrain pongGrain, int messageCount, int batchSize) { _messageCount = messageCount; _batchSize = batchSize; _pongGrain = pongGrain; return(TaskDone.Done); }
private static async Task DoClientWork() { const int messageCount = 1000000; const int batchSize = 100; int[] clientCounts = new int[] { 1, 2, 4, 8 }; var clientConfig = ClientConfiguration.LocalhostSilo(30000); GrainClient.Initialize(clientConfig); Console.WriteLine("Clients\t\tElapsed\t\tMsg/sec"); foreach (var clientCount in clientCounts) { var clients = new IPingGrain[clientCount]; var echos = new IPongGrain[clientCount]; var results = new Task <bool> [clientCount]; var observers = new IBenchmarkObserver[clientCount]; for (var i = 0; i < clientCount; i++) { clients[i] = GrainClient.GrainFactory.GetGrain <IPingGrain>(i); echos[i] = GrainClient.GrainFactory.GetGrain <IPongGrain>(i + 10); await clients[i].Init(echos[i], messageCount, batchSize); var observer = new BenchmarkObserver(); observers[i] = observer; await clients[i].Subscribe(GrainClient.GrainFactory.CreateObjectReference <IBenchmarkObserver>(observer).Result); results[i] = observer.AsTask(); } var sw = Stopwatch.StartNew(); for (var i = 0; i < clientCount; i++) { var client = clients[i]; var echo = echos[i]; client.Start().Ignore(); } Task.WaitAll(results); sw.Stop(); var totalMessages = messageCount * 2 * clientCount; var x = (int)(totalMessages / (double)sw.ElapsedMilliseconds * 1000.0d); Console.WriteLine($"{clientCount}\t\t{sw.ElapsedMilliseconds}\t\t{x}"); Thread.Sleep(2000); } Console.ReadLine(); }
private static async Task DoClientWork() { const int messageCount = 1000000; const int batchSize = 100; int[] clientCounts = new int[] { 1, 2, 4, 8, 16 }; InitSilo(); var clientConfig = ClientConfiguration.LocalhostSilo(3000); GrainClient.Initialize(clientConfig); Console.WriteLine("Clients\t\tElapsed\t\tMsg/sec"); foreach (var clientCount in clientCounts) { var clients = new IPingGrain[clientCount]; var echos = new IPongGrain[clientCount]; var completions = new TaskCompletionSource <bool> [clientCount]; for (var i = 0; i < clientCount; i++) { var tsc = new TaskCompletionSource <bool>(); completions[i] = tsc; clients[i] = GrainClient.GrainFactory.GetGrain <IPingGrain>(Guid.NewGuid()); echos[i] = GrainClient.GrainFactory.GetGrain <IPongGrain>(Guid.NewGuid()); } var tasks = completions.Select(tsc => tsc.Task).ToArray(); var sw = Stopwatch.StartNew(); for (var i = 0; i < clientCount; i++) { var client = clients[i]; var echo = echos[i]; await client.Initialize(echo, 1); } Task.WaitAll(tasks); sw.Stop(); var totalMessages = messageCount * 2 * clientCount; var x = (int)(totalMessages / (double)sw.ElapsedMilliseconds * 1000.0d); Console.WriteLine($"{clientCount}\t\t{sw.ElapsedMilliseconds}\t\t{x}"); Thread.Sleep(2000); } Console.ReadLine(); }
public Task Pong(IPongGrain @from, Message message) { pongs++; if (pings < repeats) { actor.Ping(this, msg); pings++; } else if (pongs >= repeats) { subscribers.Notify(x => x.Done(pings, pongs)); } return(TaskDone.Done); }
public Task Pong(IPongGrain pongGrain, Message message) { _batch--; if (_batch > 0) { return(TaskDone.Done); } if (!SendBatch(pongGrain)) { subscribers.Notify(s => s.BenchmarkFinished()); } return(TaskDone.Done); }
private bool SendBatch(IPongGrain pongGrain) { if (_messageCount == 0) { return(false); } var message = new Message(); for (var i = 0; i < _batchSize; i++) { pongGrain.Ping(this, message); } _messageCount -= _batchSize; _batch = _batchSize; return(true); }