This is the sento Reference Manual, version 3.0.3, generated automatically by Declt version 4.0 beta 2 "William Riker" on Sun Sep 15 04:04:08 2024 GMT+0.
sento/sento.asd
sento/src/atomic/atomic-api.lisp
sento/src/atomic/atomic.lisp
sento/src/config.lisp
sento/src/wheel-timer.lisp
sento/src/timeutils.lisp
sento/src/miscutils.lisp
sento/src/dispatcher-api.lisp
sento/src/queue/queue.lisp
sento/src/mbox/message-box.lisp
sento/src/actor-cell.lisp
sento/src/actor-api.lisp
sento/src/eventstream-api.lisp
sento/src/actor-system-api.lisp
sento/src/actor-context-api.lisp
sento/src/fcomputation.lisp
sento/src/actor.lisp
sento/src/agent.lisp
sento/src/eventstream.lisp
sento/src/tasks.lisp
sento/src/router.lisp
sento/src/stash.lisp
sento/src/dispatcher.lisp
sento/src/actor-context.lisp
sento/src/actor-system.lisp
sento/src/agent-usecase/agent-usecase-commons.lisp
sento/src/agent-usecase/hash-agent.lisp
sento/src/agent-usecase/array-agent.lisp
sento/src/package.lisp
sento.config
sento.dispatcher
sento.timeutils
sento.queue
sento.wheel-timer
sento.messageb
sento.stash
sento.atomic
sento.agent.array
sento.user
sento.agent.hash
sento.router
sento.miscutils
sento.agent.usecase-commons
sento.future
sento.actor-system
sento.eventstream
sento.tasks
sento.actor-cell
sento.actor
sento.actor-context
sento.agent
The main system appears first, followed by any subsystem dependency.
sento
Actor framework featuring actors and agents for easy access to state and asynchronous operations.
Manfred Bergmann
Apache-2
3.0.3
alexandria
(system).
log4cl
(system).
bordeaux-threads
(system).
jpl-queues
(system).
str
(system).
blackbird
(system).
binding-arrows
(system).
timer-wheel
(system).
atomics
(system).
src
(module).
Modules are listed depth-first from the system components tree.
sento/src
sento
(system).
atomic
(module).
config.lisp
(file).
wheel-timer.lisp
(file).
timeutils.lisp
(file).
miscutils.lisp
(file).
dispatcher-api.lisp
(file).
queue
(module).
mbox
(module).
actor-cell.lisp
(file).
actor-api.lisp
(file).
eventstream-api.lisp
(file).
actor-system-api.lisp
(file).
actor-context-api.lisp
(file).
fcomputation.lisp
(file).
actor.lisp
(file).
agent.lisp
(file).
eventstream.lisp
(file).
tasks.lisp
(file).
router.lisp
(file).
stash.lisp
(file).
dispatcher.lisp
(file).
actor-context.lisp
(file).
actor-system.lisp
(file).
agent-usecase
(module).
package.lisp
(file).
sento/src/atomic
src
(module).
atomic-api.lisp
(file).
atomic.lisp
(file).
sento/src/queue
dispatcher-api.lisp
(file).
src
(module).
queue.lisp
(file).
sento/src/mbox
queue
(module).
src
(module).
message-box.lisp
(file).
sento/src/agent-usecase
actor-system.lisp
(file).
src
(module).
agent-usecase-commons.lisp
(file).
hash-agent.lisp
(file).
array-agent.lisp
(file).
Files are sorted by type and then listed depth-first from the systems components trees.
sento/sento.asd
sento/src/atomic/atomic-api.lisp
sento/src/atomic/atomic.lisp
sento/src/config.lisp
sento/src/wheel-timer.lisp
sento/src/timeutils.lisp
sento/src/miscutils.lisp
sento/src/dispatcher-api.lisp
sento/src/queue/queue.lisp
sento/src/mbox/message-box.lisp
sento/src/actor-cell.lisp
sento/src/actor-api.lisp
sento/src/eventstream-api.lisp
sento/src/actor-system-api.lisp
sento/src/actor-context-api.lisp
sento/src/fcomputation.lisp
sento/src/actor.lisp
sento/src/agent.lisp
sento/src/eventstream.lisp
sento/src/tasks.lisp
sento/src/router.lisp
sento/src/stash.lisp
sento/src/dispatcher.lisp
sento/src/actor-context.lisp
sento/src/actor-system.lisp
sento/src/agent-usecase/agent-usecase-commons.lisp
sento/src/agent-usecase/hash-agent.lisp
sento/src/agent-usecase/array-agent.lisp
sento/src/package.lisp
sento/src/atomic/atomic-api.lisp
atomic
(module).
atomic-get
(generic function).
atomic-swap
(generic function).
atomic-cas
(generic function).
sento/src/atomic/atomic.lisp
atomic
(module).
atomic-get
(method).
atomic-get
(method).
atomic-swap
(method).
atomic-swap
(method).
make-atomic-integer
(function).
make-atomic-reference
(function).
print-object
(method).
print-object
(method).
%make-atomic-integer
(function).
%make-atomic-reference
(function).
*the-int*
(special variable).
*the-ref*
(special variable).
atomic-cas
(method).
atomic-cas
(method).
atomic-integer
(structure).
atomic-integer-cell
(reader).
(setf atomic-integer-cell)
(writer).
atomic-integer-p
(function).
atomic-place
(macro).
atomic-reference
(structure).
atomic-reference-cell
(reader).
(setf atomic-reference-cell)
(writer).
atomic-reference-p
(function).
copy-atomic-integer
(function).
copy-atomic-reference
(function).
sento/src/config.lisp
atomic
(module).
src
(module).
config-from
(function).
merge-config
(function).
retrieve-keys
(function).
retrieve-section
(function).
retrieve-value
(function).
%merge-config
(function).
sento/src/wheel-timer.lisp
config.lisp
(file).
src
(module).
cancel
(function).
make-wheel-timer
(function).
print-object
(method).
schedule
(function).
shutdown-wheel-timer
(function).
wheel-timer
(class).
wheel
(reader method).
(setf wheel)
(writer method).
sento/src/timeutils.lisp
wheel-timer.lisp
(file).
src
(module).
ask-timeout
(condition).
cause
(reader method).
make-timer
(function).
wait-cond
(function).
with-waitfor
(macro).
wait-time
(reader method).
sento/src/miscutils.lisp
timeutils.lisp
(file).
src
(module).
assert-cond
(function).
await-cond
(macro).
collect-backtrace
(function).
filter
(function).
mkstr
(function).
sento/src/dispatcher-api.lisp
miscutils.lisp
(file).
src
(module).
dispatch
(generic function).
dispatch-async
(generic function).
stop
(generic function).
workers
(generic function).
sento/src/queue/queue.lisp
queue
(module).
emptyq-p
(generic function).
initialize-instance
(method).
popq
(generic function).
pushq
(generic function).
queue-bounded
(class).
queue-unbounded
(class).
queue-base
(class).
sento/src/mbox/message-box.lisp
mbox
(module).
initialize-instance
(method).
initialize-instance
(method).
initialize-instance
(method).
message-box/bt
(class).
message-box/dp
(class).
print-object
(method).
stop
(generic function).
submit
(generic function).
%triggered-stop-fun
(function).
call-handler-fun
(function).
copy-message-item/bt
(function).
copy-message-item/dp
(function).
dispatch/noreply
(function).
dispatch/reply
(function).
dispatch/reply/no-timeout
(function).
dispatch/reply/timeout
(function).
dispatcher
(reader method).
dispatcher-exec-fun
(function).
handle-popped-item
(function).
make-message-item/bt
(function).
make-message-item/dp
(function).
max-queue-size
(reader method).
message-box-base
(class).
message-item/bt
(structure).
message-item/bt-cancelled-p
(reader).
(setf message-item/bt-cancelled-p)
(writer).
message-item/bt-handler-fun-args
(reader).
(setf message-item/bt-handler-fun-args)
(writer).
message-item/bt-handler-result
(reader).
(setf message-item/bt-handler-result)
(writer).
message-item/bt-message
(reader).
(setf message-item/bt-message)
(writer).
message-item/bt-p
(function).
message-item/bt-time-out
(reader).
(setf message-item/bt-time-out)
(writer).
message-item/bt-withreply-cvar
(reader).
(setf message-item/bt-withreply-cvar)
(writer).
message-item/bt-withreply-lock
(reader).
(setf message-item/bt-withreply-lock)
(writer).
message-item/bt-withreply-p
(reader).
(setf message-item/bt-withreply-p)
(writer).
message-item/dp
(structure).
message-item/dp-cancelled-p
(reader).
(setf message-item/dp-cancelled-p)
(writer).
message-item/dp-handler-fun-args
(reader).
(setf message-item/dp-handler-fun-args)
(writer).
message-item/dp-handler-result
(reader).
(setf message-item/dp-handler-result)
(writer).
message-item/dp-message
(reader).
(setf message-item/dp-message)
(writer).
message-item/dp-p
(function).
message-item/dp-time-out
(reader).
(setf message-item/dp-time-out)
(writer).
message-processing-loop
(function).
name
(reader method).
pop-queue-and-process
(function).
process-queue-item
(function).
submit/no-reply
(function).
submit/reply
(function).
wait-and-probe-for-msg-handler-result
(function).
sento/src/actor-cell.lisp
mbox
(module).
src
(module).
*self*
(special variable).
*sender*
(special variable).
*state*
(special variable).
actor-cell
(class).
call
(function).
cast
(function).
handle-call
(generic function).
handle-cast
(generic function).
initialize-instance
(method).
msgbox
(reader method).
(setf msgbox)
(writer method).
name
(reader method).
print-object
(method).
running-p
(function).
state
(reader method).
stop
(generic function).
actor-cell-state
(structure).
actor-cell-state-p
(function).
actor-cell-state-running
(reader).
(setf actor-cell-state-running)
(writer).
copy-actor-cell-state
(function).
handle-message
(function).
handle-message-internal
(function).
handle-message-user
(function).
make-actor-cell-state
(function).
submit-message
(function).
with-sender
(macro).
sento/src/actor-api.lisp
actor-cell.lisp
(file).
src
(module).
actor
(class).
after-stop
(generic function).
ask
(generic function).
ask-s
(generic function).
become
(generic function).
context
(generic reader).
(setf context)
(writer method).
make-actor
(generic function).
other-init-args
(reader method).
path
(generic function).
pre-start
(generic function).
tell
(generic function).
unbecome
(generic function).
unwatch
(generic function).
watch
(generic function).
watchers
(generic reader).
receive
(reader method).
sento/src/eventstream-api.lisp
actor-api.lisp
(file).
src
(module).
publish
(generic function).
subscribe
(generic function).
unsubscribe
(generic function).
sento/src/actor-system-api.lisp
eventstream-api.lisp
(file).
src
(module).
*default-config*
(special variable).
sento/src/actor-context-api.lisp
actor-system-api.lisp
(file).
src
(module).
actor-name-exists
(condition).
actor-of
(generic function).
all-actors
(generic function).
find-actors
(generic function).
notify
(generic function).
shutdown
(generic function).
stop
(generic function).
name
(reader method).
sento/src/fcomputation.lisp
actor-context-api.lisp
(file).
src
(module).
complete-p
(function).
fcompleted
(macro).
fmap
(macro).
frecover
(macro).
fresult
(function).
future
(class).
futurep
(function).
make-future
(function).
print-object
(method).
with-fut
(macro).
with-fut-resolve
(macro).
%fcompleted
(function).
%fmap
(function).
make-future-plain
(function).
sento/src/actor.lisp
fcomputation.lisp
(file).
src
(module).
*self*
(symbol macro).
*sender*
(symbol macro).
*state*
(symbol macro).
actor-of
(method).
after-stop
(method).
all-actors
(method).
ask
(method).
ask-s
(method).
become
(method).
find-actors
(method).
handle-call
(method).
handle-cast
(method).
make-actor
(method).
path
(method).
pre-start
(method).
print-object
(method).
publish
(method).
reply
(function).
stop
(method).
subscribe
(method).
tell
(method).
unbecome
(method).
unsubscribe
(method).
unwatch
(method).
watch
(method).
async-waitor-actor
(class).
finalize-initialization
(function).
name
(method).
notify-watchers-about-stop
(function).
stop-children
(function).
with-waiting-actor
(macro).
sento/src/agent.lisp
actor.lisp
(file).
src
(module).
agent
(class).
agent-get
(function).
agent-get-quick
(function).
agent-stop
(function).
agent-update
(function).
agent-update-and-get
(function).
make-agent
(function).
receive
(function).
sento/src/eventstream.lisp
agent.lisp
(file).
src
(module).
eventstream
(class).
make-eventstream
(function).
publish
(method).
subscribe
(method).
unsubscribe
(method).
ev-receive
(function).
subscribers
(reader method).
subscribers-for
(function).
sento/src/tasks.lisp
eventstream.lisp
(file).
src
(module).
*task-context*
(special variable).
*task-dispatcher*
(special variable).
task
(class).
task-async
(function).
task-async-stream
(function).
task-await
(function).
task-shutdown
(function).
task-start
(function).
task-yield
(function).
with-context
(macro).
make-task
(function).
sento/src/router.lisp
tasks.lisp
(file).
src
(module).
add-routee
(function).
ask
(method).
ask-s
(method).
make-router
(function).
routees
(function).
router
(class).
stop
(function).
strategy-fun
(reader method).
tell
(method).
get-strategy-fun
(function).
get-strategy-index
(function).
make-random-strategy
(function).
make-round-robin-strategy
(function).
sento/src/stash.lisp
router.lisp
(file).
src
(module).
has-stashed-messages-p
(function).
stash
(function).
stashing
(class).
unstash-all
(function).
stashed-messages
(reader method).
sento/src/dispatcher.lisp
stash.lisp
(file).
src
(module).
dispatch
(method).
dispatch-async
(method).
dispatch-worker
(class).
dispatcher-base
(class).
identifier
(reader method).
initialize-instance
(method).
make-dispatcher
(function).
make-dispatcher-worker
(function).
print-object
(method).
shared-dispatcher
(class).
stop
(method).
workers
(method).
receive
(function).
sento/src/actor-context.lisp
dispatcher.lisp
(file).
src
(module).
actor-context
(class).
actor-of
(method).
all-actors
(method).
find-actors
(method).
id
(reader method).
make-actor-context
(function).
notify
(method).
shutdown
(method).
stop
(method).
system
(reader method).
%actor-of
(function).
%add-actor
(function).
%create-actor
(function).
%find-actor-by-name
(function).
%find-actors
(function).
%get-shared-dispatcher
(function).
%message-box-for-dispatcher-id
(function).
%remove-actor
(function).
%verify-actor
(function).
actors
(method).
sento/src/actor-system.lisp
actor-context.lisp
(file).
src
(module).
actor-of
(method).
actor-system
(class).
all-actors
(method).
dispatchers
(reader method).
evstream
(reader method).
find-actors
(method).
initialize-instance
(method).
make-actor-system
(function).
print-object
(method).
publish
(method).
register-dispatcher
(function).
register-new-dispatcher
(function).
shutdown
(method).
stop
(method).
subscribe
(method).
timeout-timer
(reader method).
unsubscribe
(method).
%actor-of
(function).
%all-actors
(function).
%find-actors
(function).
%get-dispatcher-config
(function).
%get-eventstream-config
(function).
%get-timeout-timer-config
(function).
%register-config
(function).
%register-dispatchers
(function).
%register-eventstream
(function).
%register-timeout-timer
(function).
actor-context-for-key
(function).
config
(reader method).
(setf config)
(writer method).
internal-actor-context
(reader method).
user-actor-context
(reader method).
sento/src/agent-usecase/agent-usecase-commons.lisp
agent-usecase
(module).
make-model
(function).
model
(structure).
model-err-fun
(reader).
(setf model-err-fun)
(writer).
model-object
(reader).
(setf model-object)
(writer).
with-get-handler
(macro).
with-update-handler
(macro).
copy-model
(function).
model-p
(function).
sento/src/agent-usecase/hash-agent.lisp
agent-usecase
(module).
agent-clrhash
(function).
agent-dohash
(function).
(setf agent-gethash)
(setf expander).
agent-gethash
(function).
agent-remhash
(function).
make-hash-agent
(function).
agent-puthash
(function).
sento/src/agent-usecase/array-agent.lisp
agent-usecase
(module).
agent-delete
(function).
agent-doarray
(function).
(setf agent-elt)
(setf expander).
agent-elt
(function).
agent-pop
(function).
agent-push
(function).
agent-push-and-getidx
(function).
make-array-agent
(function).
agent-set
(function).
sento/src/package.lisp
agent-usecase
(module).
src
(module).
Packages are listed by definition order.
sento.config
sento.dispatcher
sento.timeutils
sento.queue
sento.wheel-timer
sento.messageb
sento.stash
sento.atomic
sento.agent.array
sento.user
sento.agent.hash
sento.router
sento.miscutils
sento.agent.usecase-commons
sento.future
sento.actor-system
sento.eventstream
sento.tasks
sento.actor-cell
sento.actor
sento.actor-context
sento.agent
sento.config
config
common-lisp
.
config-from
(function).
merge-config
(function).
retrieve-keys
(function).
retrieve-section
(function).
retrieve-value
(function).
%merge-config
(function).
sento.dispatcher
disp
common-lisp
.
dispatch
(generic function).
dispatch-async
(generic function).
dispatch-worker
(class).
dispatcher-base
(class).
identifier
(generic reader).
make-dispatcher
(function).
make-dispatcher-worker
(function).
shared-dispatcher
(class).
stop
(generic function).
workers
(generic function).
receive
(function).
sento.timeutils
timeutils
common-lisp
.
ask-timeout
(condition).
cause
(generic reader).
make-timer
(function).
wait-cond
(function).
with-waitfor
(macro).
wait-time
(generic reader).
sento.queue
queue
common-lisp
.
emptyq-p
(generic function).
popq
(generic function).
pushq
(generic function).
queue-bounded
(class).
queue-unbounded
(class).
queue-base
(class).
sento.wheel-timer
wt
common-lisp
.
cancel
(function).
make-wheel-timer
(function).
schedule
(function).
shutdown-wheel-timer
(function).
wheel-timer
(class).
wheel
(generic reader).
(setf wheel)
(generic writer).
sento.messageb
mesgb
common-lisp
.
sento.queue
.
message-box/bt
(class).
message-box/dp
(class).
stop
(generic function).
submit
(generic function).
%triggered-stop-fun
(function).
call-handler-fun
(function).
copy-message-item/bt
(function).
copy-message-item/dp
(function).
dispatch/noreply
(function).
dispatch/reply
(function).
dispatch/reply/no-timeout
(function).
dispatch/reply/timeout
(function).
dispatcher
(generic reader).
dispatcher-exec-fun
(function).
handle-popped-item
(function).
make-message-item/bt
(function).
make-message-item/dp
(function).
max-queue-size
(generic reader).
message-box-base
(class).
message-item/bt
(structure).
message-item/bt-cancelled-p
(reader).
(setf message-item/bt-cancelled-p)
(writer).
message-item/bt-handler-fun-args
(reader).
(setf message-item/bt-handler-fun-args)
(writer).
message-item/bt-handler-result
(reader).
(setf message-item/bt-handler-result)
(writer).
message-item/bt-message
(reader).
(setf message-item/bt-message)
(writer).
message-item/bt-p
(function).
message-item/bt-time-out
(reader).
(setf message-item/bt-time-out)
(writer).
message-item/bt-withreply-cvar
(reader).
(setf message-item/bt-withreply-cvar)
(writer).
message-item/bt-withreply-lock
(reader).
(setf message-item/bt-withreply-lock)
(writer).
message-item/bt-withreply-p
(reader).
(setf message-item/bt-withreply-p)
(writer).
message-item/dp
(structure).
message-item/dp-cancelled-p
(reader).
(setf message-item/dp-cancelled-p)
(writer).
message-item/dp-handler-fun-args
(reader).
(setf message-item/dp-handler-fun-args)
(writer).
message-item/dp-handler-result
(reader).
(setf message-item/dp-handler-result)
(writer).
message-item/dp-message
(reader).
(setf message-item/dp-message)
(writer).
message-item/dp-p
(function).
message-item/dp-time-out
(reader).
(setf message-item/dp-time-out)
(writer).
message-processing-loop
(function).
name
(generic reader).
pop-queue-and-process
(function).
process-queue-item
(function).
submit/no-reply
(function).
submit/reply
(function).
wait-and-probe-for-msg-handler-result
(function).
sento.stash
stash
common-lisp
.
has-stashed-messages-p
(function).
stash
(function).
stashing
(class).
unstash-all
(function).
stashed-messages
(generic reader).
sento.atomic
atomic
common-lisp
.
atomic-get
(generic function).
atomic-swap
(generic function).
make-atomic-integer
(function).
make-atomic-reference
(function).
%make-atomic-integer
(function).
%make-atomic-reference
(function).
*the-int*
(special variable).
*the-ref*
(special variable).
atomic-cas
(generic function).
atomic-integer
(structure).
atomic-integer-cell
(reader).
(setf atomic-integer-cell)
(writer).
atomic-integer-p
(function).
atomic-place
(macro).
atomic-reference
(structure).
atomic-reference-cell
(reader).
(setf atomic-reference-cell)
(writer).
atomic-reference-p
(function).
copy-atomic-integer
(function).
copy-atomic-reference
(function).
sento.agent.array
agtarray
common-lisp
.
sento.agent.usecase-commons
.
agent-delete
(function).
agent-doarray
(function).
(setf agent-elt)
(setf expander).
agent-elt
(function).
agent-pop
(function).
agent-push
(function).
agent-push-and-getidx
(function).
make-array-agent
(function).
agent-set
(function).
sento.agent.hash
agthash
common-lisp
.
sento.agent.usecase-commons
.
agent-clrhash
(function).
agent-dohash
(function).
(setf agent-gethash)
(setf expander).
agent-gethash
(function).
agent-remhash
(function).
make-hash-agent
(function).
agent-puthash
(function).
sento.router
router
common-lisp
.
add-routee
(function).
make-router
(function).
routees
(function).
router
(class).
stop
(function).
strategy-fun
(generic reader).
get-strategy-fun
(function).
get-strategy-index
(function).
make-random-strategy
(function).
make-round-robin-strategy
(function).
sento.miscutils
miscutils
common-lisp
.
assert-cond
(function).
await-cond
(macro).
collect-backtrace
(function).
filter
(function).
mkstr
(function).
sento.agent.usecase-commons
agent.usecase-commons
common-lisp
.
make-model
(function).
model
(structure).
model-err-fun
(reader).
(setf model-err-fun)
(writer).
model-object
(reader).
(setf model-object)
(writer).
with-get-handler
(macro).
with-update-handler
(macro).
copy-model
(function).
model-p
(function).
sento.future
future
blackbird
.
common-lisp
.
complete-p
(function).
fcompleted
(macro).
fmap
(macro).
frecover
(macro).
fresult
(function).
future
(class).
futurep
(function).
make-future
(function).
with-fut
(macro).
with-fut-resolve
(macro).
%fcompleted
(function).
%fmap
(function).
make-future-plain
(function).
sento.actor-system
asys
common-lisp
.
*default-config*
(special variable).
actor-system
(class).
dispatchers
(generic reader).
evstream
(generic reader).
make-actor-system
(function).
register-dispatcher
(function).
register-new-dispatcher
(function).
timeout-timer
(generic reader).
%actor-of
(function).
%all-actors
(function).
%find-actors
(function).
%get-dispatcher-config
(function).
%get-eventstream-config
(function).
%get-timeout-timer-config
(function).
%register-config
(function).
%register-dispatchers
(function).
%register-eventstream
(function).
%register-timeout-timer
(function).
actor-context-for-key
(function).
config
(generic reader).
(setf config)
(generic writer).
internal-actor-context
(generic reader).
user-actor-context
(generic reader).
sento.eventstream
ev
common-lisp
.
eventstream
(class).
make-eventstream
(function).
publish
(generic function).
subscribe
(generic function).
unsubscribe
(generic function).
ev-receive
(function).
subscribers
(generic reader).
subscribers-for
(function).
sento.tasks
tasks
common-lisp
.
*task-context*
(special variable).
*task-dispatcher*
(special variable).
task
(class).
task-async
(function).
task-async-stream
(function).
task-await
(function).
task-shutdown
(function).
task-start
(function).
task-yield
(function).
with-context
(macro).
make-task
(function).
sento.actor-cell
act-cell
common-lisp
.
*self*
(special variable).
*sender*
(special variable).
*state*
(special variable).
actor-cell
(class).
call
(function).
cast
(function).
handle-call
(generic function).
handle-cast
(generic function).
msgbox
(generic reader).
(setf msgbox)
(generic writer).
name
(generic reader).
running-p
(function).
state
(generic reader).
stop
(generic function).
actor-cell-state
(structure).
actor-cell-state-p
(function).
actor-cell-state-running
(reader).
(setf actor-cell-state-running)
(writer).
copy-actor-cell-state
(function).
handle-message
(function).
handle-message-internal
(function).
handle-message-user
(function).
make-actor-cell-state
(function).
submit-message
(function).
with-sender
(macro).
sento.actor
act
common-lisp
.
!
(generic function).
*self*
(symbol macro).
*sender*
(symbol macro).
*state*
(symbol macro).
?
(generic function).
actor
(class).
after-stop
(generic function).
ask
(generic function).
ask-s
(generic function).
become
(generic function).
context
(generic reader).
(setf context)
(generic writer).
make-actor
(generic function).
other-init-args
(generic reader).
path
(generic function).
pre-start
(generic function).
reply
(function).
tell
(generic function).
unbecome
(generic function).
unwatch
(generic function).
watch
(generic function).
watchers
(generic reader).
async-waitor-actor
(class).
finalize-initialization
(function).
name
(generic function).
notify-watchers-about-stop
(function).
receive
(generic reader).
stop-children
(function).
with-waiting-actor
(macro).
sento.actor-context
ac
common-lisp
.
actor-context
(class).
actor-name-exists
(condition).
actor-of
(generic function).
all-actors
(generic function).
find-actors
(generic function).
id
(generic reader).
make-actor-context
(function).
notify
(generic function).
shutdown
(generic function).
stop
(generic function).
system
(generic reader).
%actor-of
(function).
%add-actor
(function).
%create-actor
(function).
%find-actor-by-name
(function).
%find-actors
(function).
%get-shared-dispatcher
(function).
%message-box-for-dispatcher-id
(function).
%remove-actor
(function).
%verify-actor
(function).
actors
(generic function).
name
(generic reader).
sento.agent
agt
common-lisp
.
sento.actor
.
agent
(class).
agent-get
(function).
agent-get-quick
(function).
agent-stop
(function).
agent-update
(function).
agent-update-and-get
(function).
make-agent
(function).
receive
(function).
Definitions are sorted by export status, category, package, and then by lexicographic order.
The default config used when creating an ‘asys:actor-system‘.
The actor-system constructor allows to provide custom config options that override the default.
The ’own’ actor instance. Dynamically bound and available upon calling ‘receive‘ function.
The ‘*sender*‘ is dynamically bound and available in ‘receive‘ function, when it is known.
The ’state’ of the actor. Dynamically bound and available in ‘receive‘ function.
Optionally set this globally to use the API without using ‘with-context‘.
Optionally set a dispatcher id. Same applies here as for ‘*task-context*‘.
Awaits condition. Probes repeatedly.
If after ‘max-time’ condition is not ‘t’ it is considered failed.
Completion handler on the given ‘future‘.
If the ‘future‘ is already complete then the ‘body‘ executed immediately.
‘result‘ represents the future result.
‘body‘ is executed when future completed.
Example:
“‘
(fcompleted (with-fut
(sleep .5)
1)
(result)
(format t "Future result ~a~%" result))
“‘
‘fmap‘ maps a future.
‘future‘ is the future that is mapped.
‘result‘ is the result of the future when it completed.
‘body‘ is the form that executes when the future is completed. The result of ‘body‘ generates a new future.
Example:
“‘
(fmap (with-fut 0) (result)
(1+ result))
“‘
Catch errors in futures using ‘frecover‘
It works similar to ‘handler-case‘.
Example:
“‘
(fresult
(frecover
(-> (with-fut 0)
(fmap (value)
(declare (ignore value))
(error "foo")))
(fmap (value)
(+ value 1))))
(error (c) (format nil "~a" c))))
“‘
‘with-context‘ creates an environment where the ‘tasks‘ package functions should be used in.
‘context‘ can be either an ‘asys:actor-system‘, an ‘ac:actor-context‘, or an ‘act:actor‘ (or subclass).
‘dispatcher‘ specifies the dispatcher where the tasks is executed in (like thread-pool).
The tasks created using the ‘tasks‘ functions will then be created in the given context.
Example:
“‘elisp
;; create actor-system
(defparameter *sys* (make-actor-system))
(with-context (*sys*)
(task-yield (lambda () (+ 1 1))))
=> 2 (2 bits, #x2, #o2, #b10)
“‘
Since the default ‘:shared‘ dispatcher should mainly be used for the message dispatching,
but not so much for longer running tasks it is possible to create an actor system with additional
dispatchers. This additional dispatcher can be utilized for ‘tasks‘. Be aware that the config as used below is merged with the ‘asys:*default-config*‘ which means that the dispatcher ‘:foo‘ here is really an additional dispatcher.
“‘
;; create actor-system with additional (custom) dispatcher
(defparameter *sys* (asys:make-actor-system ’(:dispatchers (:foo (:workers 16)))))
(with-context (*sys* :foo)
(task-yield (lambda () (+ 1 1))))
“‘
Convenience macro for creating a ‘future‘.
The ‘future‘ will be resolved with the result of the body form.
Convenience macro for creating a ‘future‘ that must be resolved manually via ‘fresolve‘.
This allows to spawn threads or other asynchronous operations as part of ‘body‘. However, you have to ‘resolve‘ the future eventually by applying a result on ‘resolve‘.
Example:
“‘
(with-fut-resolve
(bt:make-thread
(lambda ()
(fresolve (do-some-lengthy-calculation)))))
“‘
Spawns thread with timeout. Blocks until computation is done, or timeout elapsed.
agent-gethash
(function).
agent-puthash
(function).
Adds a routee/actor to the router.
Clears the hash-table. See ‘cl:clrhash‘.
Deletes item from array. Internally uses ‘delete‘. Returns ‘T‘.
‘item‘: the item to delete.
‘array-agent‘: the array agent instance.
‘delete-args‘: any arguments passed on to ‘delete‘.
’Do’ arbitrary atomic operation on the array.
‘fun‘: is a 1-arity function taking the array. This function can operate on the array without interference from other threads. The result of this function must be an array which will be the new agent state.
‘array-agent‘: is the ‘array-agent‘ instance.
The result of ‘agent-doarray‘ is ‘T‘.
’Do’ arbitrary atomic operation on the hash-table.
‘fun‘: is a 1-arity function taking the hash-table. This function can operate on the hash-table without interference from other threads. The result of this function must be a hash-table.
‘hash-agent‘: is the ‘hash-agent‘ instance.
The result of ‘agent-dohash‘ is ‘T‘.
Retrieves the value of the specified index of the array. ‘agent-elt‘ allows ‘setf‘ing like:
“‘
(setf (agent-elt 0 cut) 11)
“‘
‘index‘: the index to retrieve.
‘array-agent‘: the array agent instance.
In case of error ‘agent-elt‘ returns the error condition that ‘elt‘ raises.
The ‘setf‘ functionality will call ‘err-fun‘ on error if it has been configured.
Gets the current state of the ‘agent‘.
‘get-fun‘ must accept one parameter. That is the current-state of the ‘agent‘.
To return the current state ‘get-fun‘ may be just the ‘identity‘ function.
Gets the current state with bypassing the messaging.
If you need consistent results this function should not be used.
Retrieves value from hash-table, or ‘nil‘ if it doesn’t exist.
See ‘cl:gethash‘ for more info.
This supports setting a hash using ‘setf‘ in the same way as with ‘cl:hash-table‘.
Returns any raised condition or the value from ‘gethash‘.
Pops from array and returns the popped value. Internally uses ‘vector-pop‘, so the array must have a ‘fill-pointer‘. In case of error from using ‘vector-pop‘ the condition is returned.
‘array-agent‘: the array agent instance.
Pushes a value to the array/vector. Internally uses ‘vector-push-extend‘, so the array must have a ‘fill-pointer‘.
‘item‘: item to push.
‘array-agent‘: the array agent instance.
On error it will call ‘err-fun‘ with the raised condition, if ‘err-fun‘ has been configured.
Pushes ‘item‘ to the array. This function is similar to ‘agent-push‘ but returns the index of the pushed value similar as ‘vector-push‘ does. Therefore it is based on the somewhat slower ‘ask-s‘ actor pattern. So if you don’t care about the new index of the pushed item use ‘agent-push‘ instead. But this one is able to immediately return error conditions that may occur on ‘vector-push‘.
‘item‘: item to push.
‘array-agent‘: the array agent instance.
Delete a hash-table entry. See ‘cl:remhash‘. Returns ‘t‘ if entry existed, ‘nil‘ otherwise.
Stops the message handling of the agent.
Updates the ‘agent‘ state.
‘update-fun‘ must accept one parameter. That is the current state of the ‘agent‘.
The return value of ‘update-fun‘ will be taken as the new state of the ‘agent‘.
Updates the ‘agent‘ state.
‘update-fun‘ must accept one parameter. That is the current state of the ‘agent‘.
The return value of ‘update-fun‘ will be taken as the new state of the ‘agent‘.
This function makes the update and returns the new value.
Obsolete, use ‘await-cond’ instead.
Send a message to a actor-cell instance and wait for a result.
Specify a timeout in seconds if you require a result within a certain period of time.
Be aware though that this is a resource intensive wait based on a waiting thread.
The result can be of different types.
Normal result: the last expression of ‘handle-call‘ (or ‘receive‘ in ‘act:actor‘) implementation.
Error result: ‘(cons :handler-error <condition>)’
In case of time-out the error condition is a bt:timeout.
Cancels a timer.
‘wheel-timer‘ is the ‘wt:wheel-timer‘ instance.
‘timer‘ is the timer object returned by ‘wt:schedule‘.
Sends a message to a actor-cell asynchronously. There is no result. If a ‘sender’ is specified the result will be sent to the sender.
Is ‘future‘ completed? Returns either ‘t‘ or ‘nil‘.
Parses the given config-string, represented by common lisp s-expressions.
The config is composed of plists in a hierarchy.
This function parses (run through ‘cl:read‘) the given config string.
The config string can be generated by:
“‘
(let ((*print-case* :downcase))
(prin1-to-string ’(defconfig
(:foo 1
:bar 2))))
“‘
Or just be given by reading from a file.
Notice the ’config’ s-expr must start with the root ‘car‘ ’defconfig’.
Get the computation result. If not yet available ‘:not-ready‘ is returned.
Checks if type of ‘object‘ is ‘future‘.
Are there any stashed messages?
Creates an ‘actor-context‘. Requires a reference to ‘actor-system‘
‘id‘ is an optional value that can identify the ‘actor-context‘.
Creating an actor-context manually is usually not needed.
An ‘asys:actor-system‘ implements the ‘actor-context‘ protocol.
An ‘act:actor‘ contains an ‘actor-context‘.
Creates an ‘actor-system‘.
Allows to provide an optional configuration. See ‘asys:*default-config*‘.
If no config is provided the default config is used.
Is a config provided then it is merged with the default config.
Config options in the existing config override the default config.
See ‘config:config-from‘.
Makes a new ‘agent‘ instance.
‘state-fun‘ is a function that takes no parameter and provides the initial state of the ‘agent‘ as return value.
‘actor-context‘: optionally specify an ‘asys:actor-system‘ as ‘ac:actor-context‘. If specified the agent will be registered in the system and destroyed with it should the ‘asys:actor-system‘ be destroyed. In addition the agent will use the systems shared message dispatcher and will _not_ create it’s own.
‘dispatcher-id‘: the dispatcher is configurable. Default is ‘:shared‘. But you may use also ‘:pinned‘ or a custom configured one. Be aware that ‘:shared‘ of a custom dispatcher only works if an ‘actor-context‘ was specified.
Creates an agent that wraps a CL array/vector.
‘context‘: something implementing ‘ac:actor-context‘ protocol like ‘asys:actor-system‘. Specifying ‘nil‘ here creates an agent outside of an actor system. The user has to take care of that himself.
‘initial-array‘: specify an initial array/vector.
‘error-fun‘: a 1-arrity function taking a condition that was raised.
Use this to get notified of error when using the update functions of the agent.
‘dispatcher-id‘: a dispatcher. defaults to ‘:shared‘.
Default constructor.
This creates a ‘disp:shared-dispatcher‘ with the given dispatcher config, see ‘asys:*default-config*‘.
Each worker is based on a ‘:pinned‘ actor meaning that it has its own thread.
Specify an ‘ac:actor-context‘ where actors needed in the dispatcher are created in.
Constructor for creating a worker.
‘num‘ only has the purpose to give the worker a name which includes a number.
‘dispatcher-ident is the dispatcher identifier.
Creating an eventstream is done by the ‘asys:actor-system‘ which is then available system wide.
But in theory it can be created individually by just passing an ‘ac:actor-context‘ (though I don’t know what would be the reason to create an eventstream for the context of a single actor. Maybe to address only a certain hierarchy in the actor tree.)
- ‘actor-context‘: the ‘ac:actor-context‘ where the eventstream actor should be created in.
- ‘config‘: is a plist with the ‘:dispatcher-id‘ key and a dispatcher id as value. Defaults to ‘:shared‘. This dispatcher type should be used by the actor.
Creates a future. ‘execute-fun‘ is the lambda that is executed when the future is created.
‘execute-fun‘ takes a parameter which is the ‘execute-fun‘ funtion. ‘execute-fun‘ function
takes the ‘promise‘ as parameter which is the computed value. Calling ‘execute-fun‘ with the promise
will fulfill the ‘future‘.
Manually calling ‘execute-fun‘ to fulfill the ‘future‘ is in contrast to just fulfill the ‘future‘ from a return value. The benefit of the ‘execute-fun‘ is flexibility. In a multi-threaded environment ‘execute-fun‘ could spawn a thread, in which case ‘execute-fun‘ would return immediately but no promise-value can be given at that time. The ‘execute-fun‘ can be called from a thread and provide the promise.
Create a future with:
“‘elisp
(make-future (lambda (execute-fun)
(let ((promise (delayed-computation)))
(bt:make-thread (lambda ()
(sleep 0.5)
(funcall execute-fun promise))))))
“‘
Creates an agent that wraps a CL hash-table.
‘context‘: something implementing ‘ac:actor-context‘ protocol like ‘asys:actor-system‘. Specifying ‘nil‘ here creates an agent outside of an actor system. The user has to take care of that himself.
‘initial-hash-table‘: specify an initial hash-table.
‘error-fun‘: a 1-arrity function taking a condition that was raised.
Use this to get notified of error when using the update functions of the agent.
‘dispatcher-id‘: a dispatcher. defaults to ‘:shared‘.
Default constructor of router.
Built-in strategies: ‘:random‘, ‘:round-robin‘.
Specify your own strategy by providing a function that takes a ‘fixnum‘ as parameter which represents the number of routees and returns a ‘fixnum‘ that represents the index of the routee to choose.
Specify ‘routees‘ if you know them upfront.
Creates a new ‘wheel-timer‘.
‘config‘ is a parameter for a list of key parameters including: ‘:resolution‘: the timer time resolution in milliseconds. ‘:max-size‘: the maximum size of timer functions this wheel can handle.
Merges config.
‘config‘ specifies a config that overrides what exists in ‘fallback-config‘.
‘fallback-config‘ is a default. If something doesn’t exist in ‘config‘ it is taken from ‘fallback-config‘.
Both ‘config‘ and ‘fallback-config‘ must be plists, or a ’config’ that was the output of ‘config-from‘.
Converts all parameters to string and concatenates them.
Registers a dispatcher to the actor-system.
- ‘system‘: the actor-system
- ‘dispatcher‘: the dispatcher instance.
Makes and registers a new dispatcher.
- ‘system‘: the actor-system
- ‘dispatcher-id‘: the dispatcher identifier. Usually a global symbol like ‘:foo‘
- ‘:workers‘: key argument for the number of workers.
- ‘:strategy‘: key argument for the dispatcher strategy (:random or :round-robin)
Replies to a sender. Sender must exist.
Use this from within receive function to reply to a sender.
Retrieves all section keys
Retrieves the given named section which should be a (global) ‘symbol‘ (a key).
A section usually is a plist with additional configs or sub sections.
This function looks only in the root hierarchy of the given config.
Retrieves the value for the given key and section.
Returns the routees as list.
Returns true if this server is running. ‘nil‘ otherwise.
Schedule a function execution:
‘wheel-timer‘ is the ‘wt:wheel-timer‘ instance.
‘delay‘ is the number of seconds (float) delay when ‘timer-fun‘ should be executed.
‘timer-fun‘ is a 0-arity function that is executed after ‘delay‘.
returns: a timer object that can be used to cancel the timer.
Shuts down the wheel timer and frees resources.
Stash ‘msg‘ for later unstash.
On stashing a message the actor should respond with: ‘(cons :no-reply state)‘
to avoid returning a response to sender (if given).
This function is expected to be run from within ’receive’ function.
Stops all routees.
‘task-async‘ schedules the function ‘fun‘ for asynchronous execution.
‘fun‘ must be a 0-arity function.
‘on-complete-fun‘ is a 1-arity completion handler function. When called the result is delivered.
The completion handler function parameter may also be a ‘(cons :handler-error condition)‘ construct in case an error happened within the message handling.
Using ‘task-async‘ provides two alternatives:
- together with ‘task-await‘
- or with completion handler
In fact it is possible to call ‘task-await‘ as well, but then you probably don’t need a completion handler.
Using the completion handler makes the processing complete asynchronous.
The result of ‘task-async‘ is a ‘task‘.
Store this ‘task‘ for a call to ‘task-async‘ (even with or without using ‘on-complete-fun‘).
When _not_ using ‘on-complete-fun‘ users must call either ‘task-await‘ or ‘task-shutdown‘ for the task to be cleaned up.
When using ‘on-complete-fun‘ this is done for you.
Example:
“‘elisp
;; create actor-system
(defparameter *sys* (make-actor-system))
(with-context (*sys*)
(let ((x (task-async (lambda () (some bigger computation))))
(y 1))
(+ (task-await x) y)))
;; use-case with ‘on-complete-fun‘
(defun my-task-completion (result)
(do-something-with result))
(with-context (*sys*)
(task-async (lambda () (some-bigger-computation))
:on-complete-fun #’my-task-completion))
“‘
‘task-async-stream‘ concurrently applies ‘fun‘ on all elements of ‘lst‘.
‘fun‘ must be a one-arity function taking an element of ‘lst‘.
The concurrency depends on the number of available ‘:shared‘ dispatcher workers.
Each element of ‘lst‘ is processed by a worker of the ‘asys:actor-system‘s ‘:shared‘ dispatcher.
If all workers are busy then the computation of ‘fun‘ is queued.
Example:
“‘elisp
;; create actor-system
(defparameter *sys* (make-actor-system))
(with-context (*sys*)
(->>
’(1 2 3 4 5)
(task-async-stream #’1+)
(reduce #’+)))
=> 20 (5 bits, #x14, #o24, #b10100)
“‘
‘task-await‘ waits (by blocking) until a result has been generated for a previous ‘task-async‘ by passing the ‘task‘ result of ‘task-async‘ to ‘task-await‘.
Specify ‘time-out‘ in seconds. If ‘task-await‘ times out a ‘(cons :handler-error ’ask-timeout)‘ will be returned.
‘task-await‘ also stops the ‘task‘ that is the result of ‘task-async‘, so it is of no further use.
‘task-shutdown‘ shuts down a task in order to clean up resources.
‘task-start‘ runs the given function ‘fun‘ asynchronously.
‘fun‘ must be a 0-arity function.
Use this if you don’t care about any response or result, i.e. for I/O side-effects.
It returns ‘(values :ok <task>)‘. ‘<task> is in fact an actor given back as reference.
The task is automatically stopped and removed from the context and will not be able to handle requests.
‘task-yield‘ runs the given function ‘fun‘ by blocking and waiting for a response from the ‘task‘, or until the given timeout was elapsed.
‘fun‘ must be a 0-arity function.
A normal response from the actor is passed back as the response value.
If the timeout elapsed the response is: ‘(values :handler-error miscutils:ask-timeout)‘.
Example:
“‘elisp
;; create actor-system
(defparameter *sys* (make-actor-system))
(with-context (*sys*)
(task-yield (lambda () (+ 1 1))))
=> 2 (2 bits, #x2, #o2, #b10)
“‘
Unstash all messages.
Messages are re-submitted to the actor in the order they were stashed.
Resubmitting means they are added to the end of the queue like any ordinary message would.
This function is expected to be run from within ’receive’ function.
Waits until ‘cond-fun’ is not ‘nil’ or ‘max-time’ elapsed. This blocks the calling thread.
Sends a message to the ‘actor‘. ‘tell‘ is asynchronous.
‘tell‘ does not expect a result. If a ‘sender‘ is specified the receiver will be able to send a response.
Alternatively to the ‘tell‘ function one can equally use the ‘!‘ function designator.
tell
.
Sends a message to the ‘actor‘. A ‘future‘ is returned.
Specify ‘timeout‘ if a message is to be expected after a certain time.
An ‘:handler-error‘ with ‘timeout‘ condition will be returned is the call timed out.
An ‘ask‘ is similar to a ‘ask-s‘ in that the caller gets back a result
but it doesn’t have to actively wait for it. Instead a ‘future‘ wraps the result.
However, the internal message handling is based on ‘tell‘.
How this works is that the message to the target ‘actor‘ is not ’sent’ using the callers thread but instead an anonymous ‘actor‘ is started behind the scenes. This anonymous actor can weit for a response from the target actor. The response then fulfills the future.
Alternatively to the ‘ask‘ function one can equally use the ‘?‘ function designator.
ask
.
Interface for creating an actor.
**!!! Attention:** this factory function wraps the ‘act:make-actor‘ functionality to something more simple to use.
Using this function there is no need to use both ‘act:make-actor‘.
‘context‘ is either an ‘asys:actor-system‘, an ‘ac:actor-context‘, or an ‘act:actor‘ (any type of actor).
The new actor is created in the given context.
- ‘:receive‘ is required and must be a 3-arity lambda with arguments: 1. the actor, 2. the message, 3. the state
Usually expressed as ‘(lambda (self msg state))‘.
- ‘:init‘: is an optional initialization function with one argument: the actor instance (self).
This represents a ’start’ hook that is called after the actor was fully initialized.
- ‘:destroy‘: is an optional destroy function also with the actor instance as argument.
This function allows to unsubsribe from event-stream or such.
- ‘:state‘ key can be used to initialize with a state.
- ‘:dispatcher‘ key can be used to define the message dispatcher manually.
Options are ‘:shared‘ (default) and ‘:pinned‘.
- ‘:type‘ can specify a custom actor class. See ‘act:make-actor‘ for more info.
- ‘:name‘ to set a specific name to the actor, otherwise a random name will be used.
- ‘:other-args‘ are in the actor instance as ‘other-init-args‘ and can be acted upon in i.e. ‘pre-start‘ for additional initialization.
actor-system
) &key receive init destroy dispatcher state type name other-args) ¶See ‘ac:actor-of‘
actor-context
) &key receive init destroy dispatcher state type name other-args) ¶See ‘ac:actor-of‘.
Generic function definition that is called after the actor has stopped, that is after the message box is stopped.
No more messages are being processed.
Under normal circumstances one would provide an ‘destroy‘ function at construction of the actor instead (see above). This generic function is more meant to create specialized actors by providing different implementations.
Retrieves all actors of this context as a list
actor-system
)) ¶See ‘ac:all-actors‘
actor-context
)) ¶See ‘ac:all-actors‘
Sends a message to the ‘actor‘. A ‘future‘ is returned.
Specify ‘timeout‘ if a message is to be expected after a certain time.
An ‘:handler-error‘ with ‘timeout‘ condition will be returned is the call timed out.
An ‘ask‘ is similar to a ‘ask-s‘ in that the caller gets back a result
but it doesn’t have to actively wait for it. Instead a ‘future‘ wraps the result.
However, the internal message handling is based on ‘tell‘.
How this works is that the message to the target ‘actor‘ is not ’sent’ using the callers thread but instead an anonymous ‘actor‘ is started behind the scenes. This anonymous actor can weit for a response from the target actor. The response then fulfills the future.
Alternatively to the ‘ask‘ function one can equally use the ‘?‘ function designator.
Sends a message to the ‘actor‘. ‘ask-s‘ is synchronous and waits for a result.
Specify ‘timeout‘ if a message is to be expected after a certain time.
An ‘:handler-error‘ with ‘timeout‘ condition will be returned if the call timed out.
‘ask-s‘ assumes, no matter if ‘ask-s‘ is issued from outside or inside an actor, that the response is delivered back to the caller. That’s why ‘ask-s‘ does block the execution until the result is available. The ‘receive‘ function return value will be used as the result of ‘receive‘.
Retrieve value from atomic object.
atomic-integer
)) ¶atomic-reference
)) ¶Update the the atomic object to the value returned by calling function ‘fn‘ with the previous value of the atomic object and ‘args‘.
atomic-integer
) fn &rest args) ¶atomic-reference
) fn &rest args) ¶Updates the cell value of REF atomically to the value returned by calling function FN with ARGS and the previous cell value of REF. The first argument of FN should be the previous cell value of REF.
Changes the receive of the actor to the given ‘new-behavior‘ function.
The ‘new-behavior‘ function must accept 3 parameters: the actor instance, the message and the current state.
This function should be called from within the behavior receive function.
ask-timeout
)) ¶This is the ‘actor-context‘ every actor is composed of.
When the actor is created from scratch it has no ‘actor-context‘.
When created through the ‘actor-context‘s, or system’s ‘actor-of‘ function an ‘actor-context‘ will be set.
Dispatches a function (‘dispatch-exec-fun‘) to a worker of the dispatcher to execute there. ‘dispatch‘ does a ‘ask-s‘ to a ‘dispatcher‘ worker, which means this call will block.
shared-dispatcher
) dispatch-exec-fun-args) ¶Dispatches a function to a worker of the dispatcher to execute there. ‘dispatch-async‘ does a ‘tell‘ to a ‘dispatcher‘ worker and is asynchronous.
shared-dispatcher
) dispatch-exec-fun-args) ¶actor-system
)) ¶Internal API: contains a list of available message dispatchers.
Returns ‘T’ if there is no element in the queue.
queue-bounded
)) ¶queue-unbounded
)) ¶actor-system
)) ¶The system event stream. See ‘ev:eventstream‘ for more info.
Returns actors to be found by the criteria of:
- ‘context‘: an ‘AC:ACTOR-CONTEXT‘, or an ‘ACT:ACTOR‘ or an ‘ASYS:ACTOR-SYSTEM‘ as all three implement ‘find-actors‘.
- ‘path‘: a path designator to be found. This can be just an actor name, like ’foo’, then ‘find-actors‘ will only look in the given context for the actor. It can also be: ’foo/bar’, a relative path, in which case ‘find-actors‘ will traverse the path (here ’bar’ is a child of ’foo’) to the last context and will try to find the actor by name there, ’bar’ in this case. Also possible is a root path like ’/user/foo/bar’ which will start traversing contexts started from the root context, which is the actor-system.
- ‘test‘: a 2-arity test function where the 1st argument is the ‘path‘, the 2nd is the a result of the ‘key‘ function (which defaults to ‘ACT-CELL:NAME‘, so the name of the actor). The default function for ‘test‘ is ‘STRING=‘. However, in case of a multi-subpath ‘path‘ both ‘test‘ and ‘key‘ only apply to the last path component, which designates the actor name to be found.
- ‘key‘: a 1-arity function applied on an actor instance. Defaults to ‘ACT-CELL:NAME‘.
Depending on ‘test‘ function the last path component can be used as a wildcard when using a ‘test‘ function like ‘STR:STARTS-WITH-P‘ or ‘STR:CONTAINSP‘ for example.
actor-system
) path &key test key) ¶See ‘ac:find-actors‘
actor-context
) path &key test key) ¶See ‘ac:find-actors‘
Handles calls to the server. Must be implemented by subclasses.
The result of the last expression of this function is returned back to the ’caller’.
State of the cell can be changed via ‘setf‘ing ‘*state*‘ variable.
Handles casts to the server. Must be implemented by subclasses. State of the cell can be changed via ‘setf‘ing ‘*state*‘ variable.
actor-context
)) ¶The id of this actor-context. Usually a string.
id
.
dispatcher-base
)) ¶Returns the identifier of the dispatcher.
Constructs an ‘actor‘.
Arguments:
- ‘receive‘: message handling function taking one argument, the message.
- ‘name‘: give the actor a name. Must be unique within an ‘ac:actor-context‘.
- ‘type‘: Specify a custom actor class as the ‘:type‘ key. Defaults to ’actor.
Say you have a custom actor ‘custom-actor‘ and want ‘make-actor‘ create an instance of it.
Then specify ‘:type ’custom-actor‘ on ‘make-actor‘ function.
If you have additional initializations to make you can do so in ‘initialize-instance‘.
- ‘state‘: initialize an actor with a state. (default is ‘nil‘)
- ‘init‘ and ‘destroy‘: are functions that take one argument, the actor instance.
Those hooks are called on (after) initialization and (after) stop respectively.
- ‘other-init-args‘: are additional arguments passed to ‘initialize-instance‘ of the actor class.
actor-cell
)) ¶actor-cell
)) ¶The ‘message-box‘. By default the ‘actor‘/‘actor-cell‘ has no message-box.
When the actor is created through the ‘actor-context‘ of an actor, or the ‘actor-system‘
then it will be populated with a message-box.
actor-cell
)) ¶The name of the actor/actor-cell. If no name is specified a default one is applied.
name
.
Notify the ‘actor-context‘ about something that happened to an actor.
Current exists:
- ‘:stopped‘: this will remove the actor from the context.
actor-context
) actor notification) ¶The path of the actor, including the actor itself.
The path denotes a tree which starts at the system context.
Pops the first element. Blocks until an element arrives.
queue-bounded
)) ¶queue-unbounded
)) ¶Generic function definition called after initialization but before messages are accepted.
An ‘ac:actor-context‘ is available at this point as well as ‘act:*state*‘ variable definition.
Under normal circumstances one would provide an ‘init‘ function at construction of the actor instead (see above). This generic function is more meant to create specialized actors by providing different implementations.
Publish an event/message to the eventstream. Subscribers may receive notification if they registered for the right message pattern.
actor-system
) message) ¶Convenience. Allows to publish to ‘ev:eventstream‘ by just providing the ‘asys:actor-system‘.
eventstream
) message) ¶Publish to ‘ev:eventstream‘.
Pushes an element to the queue.
queue-bounded
) element) ¶queue-unbounded
) element) ¶Stops all actors in this context.
When the context is an ‘actor-context‘ this still stop the actor context and all its actors.
For the ‘actor-system‘ it will stop the whole system with all actors.
Specify ‘wait‘ as ‘T‘ to block until all actors of the context are stopped (default ‘NIL‘).
actor-system
) &key wait) ¶See ‘ac:shutdown‘
actor-context
) &key wait) ¶See ‘ac:shutdown‘
actor-cell
)) ¶The encapsulated state.
Stops the dispatcher. Stops all workers.
shared-dispatcher
)) ¶Stops the message processing.
The message processing is not terminated while a message is still processed.
Rather it is a graceful stop by waiting until a message has been processed.
Provide ‘wait‘ EQ ‘T‘ to wait until the actor cell is stopped.
message-box/dp
) &optional wait) ¶message-box/bt
) &optional wait) ¶message-box-base
) &optional wait) ¶Stops the actor-cells message processing gracefully.
This is not an immediate stop.
There are two ways to stop an actor (cell).
1. by calling this function.
It is not an immediate stop. The actor will finish the current message processing.
‘wait‘: waits until the cell is stopped.
2. by sending ‘:stop‘ to the actor (cell).
This won’t allow to wait when the actor is stopped, even not with ‘ask-s‘.
The ‘:stop‘ message (symbol) is normally processed by the actors message processing.
actor
) &optional wait) ¶If this actor has an ‘actor-context‘, also stop all children.
In any case stop the actor-cell. See ‘actor-cell:stop‘ for more info on stopping.
actor-cell
) &optional wait) ¶Stops the given actor on the context.
The context may either be an ‘actor-context‘, or an ‘actor-system‘.
The actor is then also removed from the context.
Specify ‘wait‘ as ‘T‘ to block until the actor is stopped (default ‘NIL‘).
actor-system
) actor &key wait) ¶See ‘ac:stop‘
actor-context
) actor &key wait) ¶See ‘ac:stop‘
router
)) ¶The router strategy function.
The ‘strategy‘ is a function with a ‘fixnum‘ as input and a ‘fixnum‘ as output.
The input represents the number of routees.
The output represents the index of the routee to choose by calling the function.
Submit a message to the mailbox to be queued and handled.
‘handler-fun-args‘: list with first element the function designator and rest arguments.
message-box/dp
) message withreply-p time-out handler-fun-args) ¶Submitting a message on a multi-threaded ‘dispatcher‘ is different as submitting on a single threaded message-box. On a single threaded message-box the order of message processing is guaranteed even when submitting from multiple threads. On the ‘dispatcher‘ this is not the case. The order cannot be guaranteed when messages are processed by different ‘dispatcher‘ threads. However, we still guarantee a ’single-threadedness’ regarding the state of the actor. This is achieved here by protecting the ‘handler-fun-args‘ execution with a lock.
The ‘time-out‘ with the ’dispatcher mailbox’ assumes that the message received the dispatcher queue
and the handler in a reasonable amount of time, so that the effective time-out applies on the actual
handling of the message on the dispatcher queue thread.
Returns the handler-result if ‘withreply-p’ is eq to ‘T’, otherwise the return is just ‘T’ and is usually ignored.
message-box/bt
) message withreply-p time-out handler-fun-args) ¶The ‘handler-fun-args‘ argument must contain a handler function as first list item. It will be apply’ed with the rest of the args when the message was ’popped’ from queue.
Subscribe to the eventstream to receive notifications of certain events or event types.
‘subscriber‘ must be an actor (or agent).
The ‘pattern‘ can be:
- nil: receive all events posted to the eventstream.
- a type, class type: this allows to get notifications when an instance of this type, or class type is posted.
I.e. if you want to listen to all string messages posted to the ev, thewn subscribe to ‘’string‘.
Or if you want to listen to all lists, subscribe with ‘’cons‘.
- a symbol or global symbol: if posted message is a symbol or global symbol then the symbols are compared (‘eq‘).
- a string: in which case an exact string comparison is made for a string message that is posted to the eventstream (‘string=‘).
- a list: if subscription if for a list structure, and the posted message is also a list structure, then a structure comparison (‘equalp‘) is made.
actor-system
) (subscriber actor
) &optional pattern) ¶Convenience. Allows to subscribe to ‘ev:eventstream‘ by just providing the ‘asys:actor-system‘.
eventstream
) (subscriber actor
) &optional pattern) ¶Subscribe to ‘ev:eventstream‘.
actor-context
)) ¶A reference to the ‘actor-system‘.
Sends a message to the ‘actor‘. ‘tell‘ is asynchronous.
‘tell‘ does not expect a result. If a ‘sender‘ is specified the receiver will be able to send a response.
Alternatively to the ‘tell‘ function one can equally use the ‘!‘ function designator.
actor-system
)) ¶A wheel-timer used for timeouts to make timeouts less resource expensive.
Reverts any behavior applied via ‘become‘ back to the default ‘receive‘ function. This function should be called from within the behavior receive function.
Unsubscribe from the eventstream. No more events will be received then.
actor-system
) (unsubscriber actor
)) ¶Convenience. Allows to unsubscribe to ‘ev:eventstream‘ by just providing the ‘asys:actor-system‘.
eventstream
) (unsubscriber actor
)) ¶Unsubscribe to ‘ev:eventstream‘.
Unregisters ‘watcher‘ of ‘actor‘.
Registers ‘watcher‘ as a watcher of ‘actor‘.
Watching lets the watcher know about lifecycle changes of the actor being watched.
I.e.: when it stopped. The message being sent in this case is: ‘(cons :stopped actor-instance)‘
Returns a list of watchers of ‘actor‘.
Returns the workers of this dispatcher.
But better do not touch them.
Only use the defined interface here to talk to them.
shared-dispatcher
)) ¶shared-dispatcher
) &key num-workers strategy) ¶queue-bounded
) &key) ¶message-box/bt
) &key) ¶message-box/dp
) &key) ¶message-box-base
) &key) ¶actor-system
) &key) ¶actor-cell
) &key) ¶shared-dispatcher
) stream) ¶wheel-timer
) stream) ¶message-box-base
) stream) ¶atomic-reference
) stream) ¶atomic-integer
) stream) ¶actor-system
) stream) ¶actor-cell
) stream) ¶error
.
name
.
serious-condition
.
(quote nil)
:wait-time
This slot is read-only.
This is the ‘actor‘ class.
The ‘actor‘ does its message handling using the ‘receive‘ function.
The ‘receive‘ function takes one argument (the message). For backwards compatibility and for convenience it can still be used to provide an immediate return for ‘act:ask-s‘. ‘act:tell‘ and ‘act:ask‘ ignore a return value.
There is asynchronous ‘tell‘, a synchronous ‘ask-s‘ and asynchronous ‘ask‘ which all can be used to send messages to the actor. ‘ask-s‘ provides a synchronous return taken from the ‘receive‘ functions return value. ’ask’ provides a return wrapped in a future. But the actor has to explicitly use ‘*sender*‘ to formulate a response. ‘tell‘ is just fire and forget.
To stop an actors message processing in order to cleanup resouces you should ‘tell‘ (or ‘ask-s‘) the ‘:stop‘ message. It will respond with ‘:stopped‘ (in case of ‘ask(-s)‘).
Other init args passed to ‘make-actor‘
:other-init-args
This slot is read-only.
‘receive‘ is a function that has to take 1 parameter:
- ‘msg‘: the received message
The ‘sender‘ of the message (if available) accessible with ‘act:*sender*‘ from within the receive function or a behavior.
(error "'receive' must be specified!")
:receive
This slot is read-only.
Behavior function applied via ‘act:become‘ and reverted via ‘act:unbecome‘ ‘act:behavior‘ function takes the same parameters as ‘act:receive‘.
Init hook.
Function is called when actor was initialized.
‘act:context‘ is ready setup at that time.
Parameter of the lambda is the actor itself.
:init
Destroy hook.
Function is called when actor was stopped.
Parameter of the lambda is the actor itself.
:destroy
The ‘ac:actor-context‘
‘actor-cell‘ is the base of the ‘actor‘.
It encapsulates state and can executes async operations.
State can be changed by ‘setf‘ing ‘*state*‘ special variable from inside ‘receive‘ function, via calling ‘call‘ or ‘cast‘.
Where ‘call‘ is waiting for a result and ‘cast‘ does not.
For each ‘call‘ and ‘cast‘ handlers must be implemented by subclasses.
It uses a ‘message-box‘ to processes the received messages.
When the ‘actor‘/‘actor-cell‘ was created ad-hoc (out of the ‘actor-system‘/‘actor-context‘),
it will not have a message-box and can’t process messages.
When the ‘actor‘ is created through the ‘actor-system‘ or ‘actor-context‘,
one can decide what kind of message-box/dispatcher should be used for the new ‘actor‘.
See ‘actor-context‘ ‘actor-of‘ method for more information on this.
To stop an ‘actor‘ message handling and you can send the ‘:stop‘ message
either via ‘call‘ (which will respond with ‘:stopped‘) or ‘cast‘.
This is to cleanup thread resources when the actor is not needed anymore.
Note: the ‘actor-cell‘ uses ‘call‘ and ‘cast‘ functions which translate to ‘ask-s‘ and ‘tell‘ on the ‘actor‘.
The name of the actor/actor-cell. If no name is specified a default one is applied.
(string (gensym "actor-"))
:name
name
.
This slot is read-only.
The encapsulated state.
:state
This slot is read-only.
The internal state of the server.
(sento.actor-cell::make-actor-cell-state)
The ‘message-box‘. By default the ‘actor‘/‘actor-cell‘ has no message-box.
When the actor is created through the ‘actor-context‘ of an actor, or the ‘actor-system‘
then it will be populated with a message-box.
‘actor-context‘ deals with creating and maintaining actors.
The ‘actor-system‘ and the ‘actor‘ itself are composed of an ‘actor-context‘.
actor-of
.
actors
.
all-actors
.
find-actors
.
id
.
notify
.
shutdown
.
stop
.
system
.
The id of this actor-context. Usually a string.
:id
id
.
This slot is read-only.
A list of actors.
This is internal API. Use ‘all-actors‘ or ‘find-actors‘ instead.
(sento.atomic:make-atomic-reference :value (quote nil))
An ‘actor-system‘ is the opening facility. The first thing you do is to create an ‘actor-system‘ using the main constructor ‘make-actor-system‘.
With the ‘actor-system‘ you can create actors via the ‘ac:actor-context‘ protocol function: ‘ac:actor-of‘.
Or even simpler via ‘act:actor-of‘ which is a convenience macro:
“‘elisp
(act:actor-of (*system*)
(lambda (msg)
;; do stuff))
“‘
Internal API: contains a list of available message dispatchers.
(quote nil)
This slot is read-only.
Internal API: the actor-system configuration.
(quote nil)
Internal API: an actor context reserved for agents/actors used by the system.
This slot is read-only.
Internal API: an actor context for agents/actors created by the user.
This slot is read-only.
The system event stream. See ‘ev:eventstream‘ for more info.
This slot is read-only.
A wheel-timer used for timeouts to make timeouts less resource expensive.
This slot is read-only.
Specialized ‘actor‘ class called ‘agent‘.
It is meant primarily to encapsulate state.
To access state it provides ‘agent-get‘ and ‘agent-update‘ to update state.
Stop an agent with ‘agent-stop‘ to free resources (threads).
Specialized ‘actor‘ used as ‘worker‘ is the message ‘dispatcher‘.
A ‘dispatcher‘ contains a pool of ‘actors‘ that operate as workers where work is dispatched to. However, the workers are created in the given ‘ac:actor-context‘.
Eventstream facility allows to post/publish messages/events in the ‘asys:actor-system‘ and actors that did subscribe, to listen on those events.
The eventstream is driven by an actor. The processing of the sent events is guaranteed to be as they arrive.
Events can be posted as plain strings, as lists, or as objects of classes.
The subscriber has a variaty of options to define what to listen for.
For example: a subscriber wants to listen to events/messages with the string "Foo".
The subscriber is then only notified when events are posted with the exact same string.
See more information at the ‘ev:subscribe‘ function.
The wrapped [blackbird](https://orthecreedence.github.io/blackbird/) ‘promise‘, here called ‘future‘.
Not all features of blackbird’s ‘promise‘ are supported.
This ‘future‘ wrapper changes the terminology. A ‘future‘ is a delayed computation.
A ‘promise‘ is the fulfillment of the delayed computation.
blackbird-base
.
Bordeaux-Threads based message-box with a single thread operating on a message queue.
This is used when the actor is created using a ‘:pinned‘ dispatcher type.
There is a limit on the maximum number of actors/agents that can be created with
this kind of queue because each message-box (and with that each actor) requires exactly one thread.
This message box is a message-box that uses the ‘system‘s ‘dispatcher‘.
This has the advantage that an almost unlimited actors/agents can be created.
This message-box doesn’t ’own’ a thread. It uses the ‘dispatcher‘ to handle the message processing.
The ‘dispatcher‘ is kind of like a thread pool.
Bounded queue.
Unbounded queue.
(make-instance (quote jpl-queues:synchronized-queue) :queue (make-instance (quote jpl-queues:unbounded-fifo-queue)))
A router combines a pool of actors and implements the actor-api protocol.
So a ‘tell‘, ‘ask-s‘ and ‘ask‘ is delegated to one of the routers routees.
While a router implements parts of the actor protocol it doesn’t implement all.
I.e. a router cannot be ‘watch‘ed.
A router ‘strategy‘ defines how one of the actors is determined as the forwarding target of the message.
ask
.
ask-s
.
strategy-fun
.
tell
.
The routees.
(make-array 2 :adjustable t :fill-pointer 0)
The router strategy function.
The ‘strategy‘ is a function with a ‘fixnum‘ as input and a ‘fixnum‘ as output.
The input represents the number of routees.
The output represents the index of the routee to choose by calling the function.
:strategy-fun
This slot is read-only.
A shared dispatcher.
Internally it uses a ‘router:router‘ to drive the ‘dispatch-worker‘s.
The default strategy of choosing a worker is ‘:random‘.
A ‘shared-dispatcher‘ is automatically setup by an ‘asys:actor-system‘.
‘stashing‘ is a mixin class to ‘act:actor‘.
It can ’stash’ away arriving messages which should not be handled now, but later, after the actor is ’able’ to handle them. Create an actor class that can stash like this:
“‘
(defclass stash-actor (actor stashing) ())
“‘
Then create an actor by specifying this type:
“‘
(actor-of system
:type ’stash-actor
:receive (lambda (msg)
...))
“‘
For stash and unstash see function descriptions below.
The main use-case is for ‘act:tell‘ and ‘act:ask‘. ‘act:ask-s‘ will not work.
timeouts are ignored because it is not clear how long stashed messages will reside in stash.
However the ‘sender‘, if given (on ‘act:tell‘), is preserved.
Stash is an unbounded list.
Stash items are a tuple (alist) of ‘msg’ and ‘sender’.
(quote nil)
This slot is read-only.
A dedicated ‘act:actor‘ subclass used for tasks.
Wheel timer class
The wheel.
special var used for CAS
special var used for CAS
Private API to create system actors. Context-key is either ‘:internal‘ or ‘:user‘ Users should use ‘actor-of‘.
See ‘ac:actor-of‘
Private API to find actors in both contexts the actor-system supports. Users should use ‘ac:find-actors‘.
Creates a plist of dispatchers for the ‘:dispatchers‘ configuration section.
Checks certain things on the actor before it is attached to the context.
Internal
Internal for ‘setf‘.
cell
.
cell
.
‘handler-fun-args’ is a list with a function at ‘car’ and args as ‘cdr’. ‘message’ is prepended to args.
Used by ‘ask’.
Returns just ‘T’. Return is actually ignore.
Used by ‘ask-s’ Returns ‘handler-result’.
Returns dispatcher result.
Waits for ‘handler-result’ or timeout and returns ‘handler-result’.
This function is effectively executed on a dispatcher actor.
It knows the message-box of the origin actor and acts on it.
It pops the message from the message-boxes queue and applies the function in ‘handler-fun-args‘ on it.
The ‘handler-fun-args’ is part of the message item.
Private API: finalize initialization of the actor with a ‘mesgb:message-box‘ and an ‘ac:actor-context‘.
This function is submitted as ‘handler-fun‘ to message-box.
A ‘:stop‘ message will response with ‘:stopping‘ and the user handlers are not called. Otherwise the result is ‘:resume‘ to resume user message handling.
The user defined message handler.
Effectively this calls the ‘handle-call‘ or ‘handle-cast‘ functions.
Handles the popped message. Means: applies the function in ‘handler-fun-args‘ on the message.
The default, built-in strategy: random.
Returns a let-over-lambda that implements a round-robin strategy.
The message processing loop.
This blocks until a new queue item arrived.
The ‘time-out’ handling in here is to make sure that handling of the
message is ’interrupted’ when the message was ’cancelled’.
This should happen in conjunction with the outer time-out in ‘submit/reply’.
This function sets the result as ‘handler-result’ in ‘item’. The return of this function is not relevant.
The worker receive function.
This is the agents actor receive function implementation.
This rarely (if at all) needs to change because the agent is very specific.
Submitting a message.
In case of ‘withreply-p‘, the ‘response‘ is filled because submitting to the message-box is synchronous.
Otherwise submitting is asynchronous and ‘response‘ is just ‘t‘.
In case the actor-cell was stopped it will respond with just ‘:stopped‘.
In case no messge-box is configured this function respnds with ‘:no-message-handling‘.
This is quite efficient, no locking necessary.
If the message was submitted with timeout then the timeout plays no role here, the message is handled anyhow.
The submitting code has to await the side-effect and possibly handle a timeout.
This function has to provide a result and so it has to wait until the queue thread has processed the message. Processing of the queue item is done in ‘process-queue-item’.
actor-context
)) ¶Set ‘new‘ value. The current value must be ‘extented‘.
atomic-integer
) expected new) ¶atomic-reference
) old new) ¶Synonym for COMPARE-AND-SWAP.
Atomically store NEW in the cell slot of REF if OLD is eq to the current value of cell slot.
Return non-NIL if this atomic operaion succeeded, or return NIL if it failed.
actor-system
)) ¶actor-system
)) ¶Internal API: the actor-system configuration.
message-box/dp
)) ¶The dispatcher from the system.
actor-system
)) ¶Internal API: an actor context reserved for agents/actors used by the system.
message-box-base
)) ¶0 or nil will make an unbounded queue.
A value ‘> 0‘ will make a bounded queue.
Don’t make it too small. A queue size of 1000 might be a good choice.
message-box-base
)) ¶The name of the message-box.
The default name is concatenated of "mesgb-" and a ‘gensym‘ generated random number.
name
.
actor-name-exists
)) ¶name
.
eventstream
)) ¶automatically generated reader method
actor-system
)) ¶Internal API: an actor context for agents/actors created by the user.
ask-timeout
)) ¶wheel-timer
)) ¶wheel-timer
)) ¶The wheel.
structure-object
.
boolean
t
Wrapper atomics package.
structure-object
.
Wrapper atomics package.
structure-object
.
structure-object
.
boolean
boolean
list
(quote sento.messageb::no-result)
structure-object
.
boolean
list
(quote sento.messageb::no-result)
The user does not need to create a message-box manually. It is automatically created and added to the ‘actor‘ when the actor is created through ‘act:actor-of‘ or ‘ac:actor-of‘.
The name of the message-box.
The default name is concatenated of "mesgb-" and a ‘gensym‘ generated random number.
(string (gensym "mesgb-"))
:name
name
.
This slot is read-only.
0
Which type of queue will be used depends on the ‘max-queue-size‘ setting.
0 or nil will make an unbounded queue.
A value ‘> 0‘ will make a bounded queue.
Don’t make it too small. A queue size of 1000 might be a good choice.
0
:max-queue-size
This slot is read-only.
Jump to: | !
%
(
?
A B C D E F G H I M N O P R S T U W |
---|
Jump to: | !
%
(
?
A B C D E F G H I M N O P R S T U W |
---|
Jump to: | *
A B C D E H I L M N O P Q R S T U W |
---|
Jump to: | *
A B C D E H I L M N O P Q R S T U W |
---|
Jump to: | A C D E F H M P Q R S T W |
---|
Jump to: | A C D E F H M P Q R S T W |
---|