You can now create a single-threaded objects by inheriting from Actor, all
calls will then be queued (instead of blocked by a mutex). Remote calls,
future continuations, signal callbacks, periodic tasks callbacks and async
calls are guaranteed to be single-threaded.

For in-process communications, this guarantees that signal callbacks will be
triggered in order.

qi::Signal<int> sig;
sig.connect(&MyClass::myCallback, myObj);
sig(1);
sig(2);
// if MyClass is an actor, it is guaranteed that myCallback(1) will be called
// before myCallback(2)

Work is still in progress to support that for remote communications.

All this is also supported in Python if your object is single-threaded (the
default), there is no need to inherit from anything.

It is recommended to write single-threaded services as thread contention is
reduced by the framework in these cases. Furthermore, code do not need the use
of synchronization primitives, which avoids a lot of bugs.