at:tutorial:actors
Differences
This shows you the differences between two versions of the page.
Both sides previous revisionPrevious revisionNext revision | Previous revisionNext revisionBoth sides next revision | ||
at:tutorial:actors [2007/07/18 11:21] – elisag | at:tutorial:actors [2008/06/23 15:05] – renamed tvcutsem | ||
---|---|---|---|
Line 201: | Line 201: | ||
We have described a future as a placeholder for the return value of an asynchronous message send which is eventually // | We have described a future as a placeholder for the return value of an asynchronous message send which is eventually // | ||
- | Blocking a thread on a future can be a major source of deadlocks, like any form of blocking, of course. In the actor paradigm where communication between actors should remain strictly asynchronous, | + | Blocking a thread on a future can be a major source of deadlocks, like any form of blocking. In the actor paradigm where communication between actors should remain strictly asynchronous, |
The solution proposed in the [[http:// | The solution proposed in the [[http:// | ||
+ | |||
+ | As an example of a pipeline of message sends, consider the following code: | ||
+ | |||
+ | < | ||
+ | def booleanFuture := remoteObject< | ||
+ | booleanFuture< | ||
+ | ... | ||
+ | } ifFalse: { | ||
+ | ... | ||
+ | } | ||
+ | </ | ||
+ | |||
+ | In this example, the message '' | ||
==== Working with Resolved Futures ==== | ==== Working with Resolved Futures ==== | ||
Line 271: | Line 284: | ||
</ | </ | ||
- | Finally, it is useful to know that '' | + | Finally, it is useful to know that '' |
< | < | ||
Line 318: | Line 331: | ||
An actor in AmbientTalk is primarily a //host// for regular objects. It is equipped with a message queue to receive asynchronous messages sent to one of its objects. The mirrors on these objects have corresponding meta-level operations such as '' | An actor in AmbientTalk is primarily a //host// for regular objects. It is equipped with a message queue to receive asynchronous messages sent to one of its objects. The mirrors on these objects have corresponding meta-level operations such as '' | ||
- | Some operations, such as creating and sending asynchronous messages are useful to reify at the //actor level//. With such a reification, | + | Some operations, such as creating and sending asynchronous messages are useful to reify at the //actor level//. With such a reification, |
- | Overriding the actor' | + | Overriding the actor' |
< | < | ||
- | def oldmirror := actor.install: (extend: actor with: { | + | def actor := reflectOnActor(); |
+ | def oldmirror := actor.becomeMirroredBy: (extend: actor with: { | ||
def send(msg) { | def send(msg) { | ||
log(msg); | log(msg); | ||
Line 331: | Line 345: | ||
</ | </ | ||
- | Notice that, in this example, the new metaobject protocol is an extension of the old protocol. This enables it to invoke its parent' | + | Notice that, in this example, the new metaobject protocol is an extension of the old protocol. This enables it to invoke its parent' |
+ | < | ||
For a good use case of actor mirrors, see the '' | For a good use case of actor mirrors, see the '' | ||
+ | </ | ||
Other methods that can be overridden are '' | Other methods that can be overridden are '' |
at/tutorial/actors.txt · Last modified: 2020/02/05 21:26 by elisag