Features
Find out what makes Pronghorn so great.
1. Broad compatibility
Java profile compact1
No use of Unsafe, Java 9 module compatibility
2. Simple concurrency model
Quickly write correct code with actors
Easily leverage hundreds or more cores
All pipes are defined as produced from one actor and consumed by one other
3. Separation of design concerns
Business aware scheduling
Actors who do not have work are not scheduled
Schedulers can be custom designed or existing solutions applied
Strong types generated externally
Types between actors are externally defined
New fields can be added and mapped to new business specific usages
4. Multiple APIs
Embedded friendly use of wrapping arrays
Integrate with a wide variety of existing interfaces
Visitors for reading and writing
Object proxies for reading and writing
Zero copy direct access to input and output fields
Replay of messages until they are released
5. Simple debug and refactoring
Messages have full provenance and actor chain upon exception
Test framework supports automated regression test construction for refactor
Fuzz testing based on message pipes definitions
Generative contract testing based on behavior definitions for stages
6. Static memory allocations
No need to release memory and no GC
Simplify memory usage analysis of the application
Minimize runtime failures, including out of memory
7. Copy preferred over lock usage
No stalled cores, block free, wait free, continuous progress
Efficient power usage
Leverages new fast memory subsystems
Enables efficient NUMA usage
8. Sequential memory usage
Leverages CPU pre-fetch and caches for fastest possible throughput
Persistence and immediate start up for free with non-volatile memory
All media is sequential, mechanical sympathy
Maximum use of hardware bandwidth
9. Software sketches
Extensive requirements gathering put into a graph
Involve non-technical people in the early stages
Refine the design before making any commitments, or beginning iterations
10. Minimized deployed application
For embedded systems, only the needed applications and interfaces are deployed
Configuration is done at compile time
Ultra-small attack surface
Scales well in docker and cloud deployments
Targets absolute minimum resources consumed
Last updated