Async + Aff support + major optimisations
This is a big release, which should be treated with some caution - so make sure you have a bit of time to test it before going into a production environment
- Early indications are that performance is 2.5x better (no formal benchmarks yet though)
- Processes now use
ValueTaskinternally for first class support ofasyncoperations within the setup, inbox, termination, and shutdown functions- Processes are now lock free
- No threads are used if the Process is not processing a message
- The underlying queues were previously used a pausable-blocking-queue implementation which caused two threads to be held for every Process, and so now we only have a thread alive when the message is being processed.
- Support for language-ext
Aff- New 'prelude' in
Process<RT>which supportsAffruntimes - The underlying IO is not yet fully 'injectable', this will come with a future release
- New 'prelude' in
- There are now 32 'ask actors', these are the Processes that receive an
askrequest and auto-resolves the response. The new system shards the ask-actor to use by the request ID. This should lead to performance gains for asks. LocalSchedulerwhich was used to send scheduled messages within the app-domain has been rewritten to useThreading.Timer, rather than its own scheduling implementation. This should lead to more accurate scheduling and probably more efficient schedulingRemoteSchedulerwhich schedules persistent messages has been refactored to store all schedulers for a specific process in a single Redis key - this removes the need to call thekeys %command in Redis, improvement performance and reliability.- Removed dependency on
Owin.WebSocketforEcho.Process.Own - Improved bootstrapping, for a more deterministic setup of the process system
- Only the root Process needs bootstrapping, the rest of the system Processes are now regular echo processes, with no 'special' processing
- Removed the
transactionalIOsystem - this wasn't effective enough, and can probably be replaced by a AST with a bespokeAffruntime (if necessary). - Moved to latest version of language-ext, with use of the new
AtomHashMapand improvedAtomstability