split systemDispatch(Create()) into systemEnqueue(Create()) directly
after createMailbox and registerForExecution from within
Dispatcher.attach() (resp. CallingThreadDispatcher.register() does its
own thing)
- change from messageQueue.numberOfMessages to maintaining an AtomicLong
for performance reasons
- add comments/scaladoc where missing
- remove some assert()s
- fix ResiserSpec to employ buddy-wakeup-threshold
- add new config item "buddy-wakeup-threshold" which defaults to 5
- if BWT>=0, then check mailbox.numberOfMessages in case the target
actor was not scheduled during dispatch and schedule a buddie if that
is found >=BWT (BWT is a getfield)
- if during unregister() there are messages in the queue, schedule a
buddie
This way people can tune which behavior they want, knowing full well
that numberOfMessages is O(n).
Normally the ActorCell would register the actor with the dispatcher
(yeah, I moved it into the logical order, because the other one was
specifically done for BD but does not work out) and then dispatch the
Create() message. This does not work for BD, because then the actor
could potentiall process a message before Create() is enqueued, so
override systemDispatch() to drop Create() and insert that during
register() (which is called from attach()), making sure to achieve the
following order:
- enqueue Create()
- register with dispatcher
- add to buddies
- schedule mailbox
System.identityHashCode is not guaranteed to be consistent with equals()
(cannot be, just imagine more than 2^32 objects); fix it by checking
equals in case 0 would be returned and fall back to a real Comparator in
case that’s needed.
* ActorTimeout (akka.actor.timeout) was used to all sorts of things.
* TestKit default-timeout
* TypedActor timeout for non void methods
* Transactor coordinated-timeout
* ZeroMQ new-socket-timeout
* And in various tests
- assert locking balance when using Unsafe.instance.monitorExit
- add RouterConfig.routerDispatcher
- re-enable “busy” resizer test after switching to BalancingDispatcher
- document resizer asynchronicity and how to configure dispatchers