Comment on page


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 modified 5yr ago