43 releases
0.5.1 | Apr 10, 2020 |
---|---|
0.5.0 | Jul 9, 2019 |
0.4.11 | Jul 2, 2019 |
0.4.1 | Jan 5, 2019 |
0.2.10 | Jul 29, 2018 |
#1445 in Asynchronous
80KB
1.5K
SLoC
kay
kay is a...
- High-performance actor system for Rust
- suitable for simulating millions of entities in realtime
- which only communicate using asynchronous messages
kay can be transparently and trivially scaled onto...
- multiple cores
- multiple networked computers
- browser clients with
wasm
andcargo web
It offers...
- Actor
ID
s identifying- Instances of an Actor Type
- Broadcasts to all instances of an Actor Type
- Generic (type-erased) Actor Trait IDs
- Actor instances across networked computers
- A
Recipient<Message>
trait in which a user implements message handling for each message type that an Actor can receive -
InstanceStore
s - collections of large numbers of instances of one actor type- Compact and efficiently managed memory storage for dynamically-sized instance state, supplied by
chunky
- Dispatch of messages to individual instances
- Very efficient broadcasting of a message to all instances
- Compact and efficiently managed memory storage for dynamically-sized instance state, supplied by
- Serialisation-free persistence, snapshotting and loading of actor and system state using memory-mapped files, implemented by
chunky
- Abstractions like futures and map-reduce for awaiting and aggregating asynchronous responses from other actors
- "Essential" message types that are handled even after a panic occurs in an Actor, allowing interactive inspection of the whole panicked system
It internally uses...
- A message queue per Actor Type that is
- unbounded
- multi-writer, single-reader
- lock-free
- The experimental
TypeId
feature, to tag message blobs with their type id for runtime message handling function dispatch - A Slot Map in
InstanceStore
s to assign uniqueID
s to instances, while always keeping them in continous memory chunks. This makes iterating over them for broadcast messages very fast.
kay is inspired by Data-Oriented Game Development, Erlang and the original ideas behind Object-Orientedness. It is thus named after Alan Kay.
Dependencies
~5MB
~122K SLoC