No Description

Forest Johnson 51d166d4f7 Fix typo 3 years ago
Properties a08ea62b7c Initial Commit 3 years ago
.gitignore a08ea62b7c Initial Commit 3 years ago
AbstractEventProcessor.cs 28166538f6 more work figuring out how i want example to look, using composition here 3 years ago
AsyncEventProcessor.cs 15506a0966 clean up 3 years ago
DisruptorTest.cs d786482237 more renaming 3 years ago
DisruptorTest.csproj ec17bc3156 renaming stuff 3 years ago
DisruptorTest.sln 46c4255a76 vs version 3 years ago
Extensions.cs d786482237 more renaming 3 years ago
FakeDataGenerator.cs dedb29eeb1 Renaming things and adding comments 3 years ago
ILock.cs 28166538f6 more work figuring out how i want example to look, using composition here 3 years ago
InterleavedParallelEventHandler.cs fc98a55398 renaming stuff and cleaning up 3 years ago
MockExternalService.cs eb87c2abe1 decrease fake latency 3 years ago
Models.cs dedb29eeb1 Renaming things and adding comments 3 years ago
README.md 51d166d4f7 Fix typo 3 years ago
RequestBuilder.cs 787d8b2641 Working on Stream processing example 3 years ago
RequestSender.cs 88a52405df Task or Callback on request sender 3 years ago
Screenshot.png 367c788df1 updated screenshot 3 years ago
SimpleEventHandler.cs 2149e0ab25 Adding simple Event Handler 3 years ago
SpinLock.cs 939a80077a Cleaning up and adding more logging 3 years ago
packages.config 787d8b2641 Working on Stream processing example 3 years ago

README.md

disruptor-stream-csharp

An example of the Disruptor C# implementation which processes a stream of updates to Todo Lists and sends them to an imaginary external service.

Dependency on NUnit 3 test adapter

To test the project on your machine, install the NUnit 3 test adapter via Tools -> Extensions and Updates in Visual Studio. Then run the tests. It will try all different configuration combinations and report a ranked list to each tests Output in the Test Explorer window.

nunit screenshot

On my laptop, the highest throughput was with large objects, a ring with 512 elements, 4 JSON threads, using the sleeping wait strategy and the low-contention multi-threaded claim strategy. It processed 89 Megabytes per second.

Took: 236 ms to process 1500 updates 
at a rate of 89 megabytes per second 


rate of 89 MB/s with jsonParallelism: 4, ringSize: 512, maxNumberOfItemsPerList: 80, 
rate of 85 MB/s with jsonParallelism: 4, ringSize: 1024, maxNumberOfItemsPerList: 80, 
rate of 76 MB/s with jsonParallelism: 2, ringSize: 512, maxNumberOfItemsPerList: 80, 
rate of 72 MB/s with jsonParallelism: 2, ringSize: 1024, maxNumberOfItemsPerList: 80, 
rate of 58 MB/s with jsonParallelism: 1, ringSize: 512, maxNumberOfItemsPerList: 80, 
rate of 50 MB/s with jsonParallelism: 1, ringSize: 1024, maxNumberOfItemsPerList: 80, 
rate of 32 MB/s with jsonParallelism: 2, ringSize: 512, maxNumberOfItemsPerList: 10, 
rate of 32 MB/s with jsonParallelism: 4, ringSize: 512, maxNumberOfItemsPerList: 10, 
rate of 27 MB/s with jsonParallelism: 1, ringSize: 512, maxNumberOfItemsPerList: 10, 
rate of 26 MB/s with jsonParallelism: 4, ringSize: 1024, maxNumberOfItemsPerList: 10,