Bruce Eckel wrote: > Since the enqueuing process serializes all requests to active objects, > and since each message-task runs to completion before the next one > starts, the problem of threads interfering with each other is > eliminated. Also, the enqueuing process will always happen, so even if > the queue blocks it will be for a very short, deterministic time. So > the theory is that Active Object systems cannot deadlock (although I > believe they can livelock).
My experience with active objects is with SDL (the Specification and Description Language). There, the primitive communication between objects is through one-way messages (called signals). Such a system can deadlock if an object doesn't produce "enough" new outgoing messages in response to incoming messages. If all communication is through RPCs, i.e. you owe your caller a response, then the only way to deadlock such a system is that all active objects terminate. The interesting question then is whether an object can terminate while processing a message, and whether this will cause a response to be sent back. > But what's not clear is whether this would > require knowledge of the innards of the Python interpreter (which I > don't have) or if it could be built using libraries. As others have pointed out, you have to find a way to deal with the standard library. In principle, each active object should have its own copy of the standard library. For some modules/objects, this is not reasonable (e.g. stdout). In OCCAM, host IO itself is (conceptually) an occam process, so sys.stdout would have to become an active object. In that approach, you would essentially have to rewrite parts of the standard library, wrapping the underlying modules appropriately. > BTW: I think that Hoare's Communicating Sequential Processes (CSP) > basically describes the idea of active objects but without objects. > That is, I think active objects is CSP applied to OO. I don't believe this is true. In CSP, communication between processes is through rendezvous, which is quite different from active objects, as there is no queue for incoming calls - instead, the receiving process must expect a specific communication partner just like the sending process; there is also no inherent request/response mechanism in CSP. In CSP, there is plenty of chance for deadlocks. If a process becomes STOP (i.e. the process that will never again interact), then any communication attempt with that process also cause the partner to become STOP. Regards, Martin _______________________________________________ Python-Dev mailing list Python-Dev@python.org http://mail.python.org/mailman/listinfo/python-dev Unsubscribe: http://mail.python.org/mailman/options/python-dev/archive%40mail-archive.com