Skip to content
WJunction - Webmaster Forum

JActor

Status
Not open for further replies.

3 comments

send 1 billion messages to where ?
:)

More information can be found here.

Make sure to follow his blog.

Readme:

Code:
The JActor project implements actors in Java that can process 1 Billion messages per second.
Project pages can be found here:
    http://sourceforge.net/p/jactor/home/Home/ and
    https://github.com/laforge49/JActor

API: http://jactor.sourceforge.net/

Be sure to follow the project blog: https://sourceforge.net/p/jactor/blog/

This project is a reimplementation of a portion of the AsyncFP Scala project:
    https://github.com/laforge49/Asynchronous-Functional-Programming/wiki

Message passing between actors uses 2-way messages (request / response). There are several
reasons for this:

    o With 2-way messaging, sending a request is very similar to a method call with a callback.
    Most requests are processed synchronously, which is why JActor is so much faster than other
    actor implementations.
    o Mailboxes are used mostly when passing messages between threads and are first-class objects.
    As first-class objects, mailboxes can be used by more than one actor. Passing messages between
    actors with a common mailbox is always done synchronously and is very fast.
    o Flow control is implicit to 2-way messaging. Systems with good flow control are generally
    well-behaved when operating with a full load.
    o Two-way messaging is so much faster than 1-way messaging that it is practical to use 2-way
    messages when 1-way messages are needed.

Exception Handling

The extensive use of callbacks complicates control flow, which is only made worse with some
callbacks being executed asynchronously. Exception trapping then can be quite error prone. So
exception handling is supported. A default exception handler is also provided which passes any
uncaught exceptions that occurred while processing a request back to the actor which sent the
request, recursively.

Bi-Modal Iterator

Loops with 2-way messages can be problematic, as iterations typically must wait for the response
from the previous iteration. A bi-modal iterator is provided to cover this. Each iteration takes
5 nanoseconds for synchronous responses and 8 nanoseconds when a response is asynchronous.

State Machine

State machines are often used with actors and can add considerable clarity to the code. JActor
includes classes for composing and executing state machines that are compatible with 2-way
messages.

Message Passing Benchmarks

When actors share the same mailbox, 1,095,890,410 messages are passed per second. Otherwise the
rate drops to 71,095,312 per second.

Asynchronous message passing is also supported, making it easy to use all the available hardware
threads for good vertical scalability. Messages sent to an actor with an asynchronous mailbox are
passed asynchronously at a rate of 42,149,631 per second.

Tests were done on an Intel Core i5 CPU M 540 @ 2.53GHz, which has 4 hardware threads. The times
reported were best run in 5. Only standard switch settings were used--there was NO compiler
optimization.
 
Status
Not open for further replies.

About the author

D
Active Member · Joined
Gaming
16,012
Messages
3,075
Reactions
113
Points

Advertise on WJunction

Reach 1000's of webmasters, hosts & affiliates. Banner & sponsored-thread slots available.

Contact us
Back
Top Bottom