This is the hunchentoot-recycling-taskmaster Reference Manual, version 0.0.1, generated automatically by Declt version 4.0 beta 2 "William Riker" on Fri May 15 12:28:08 2026 GMT+0.
The main system appears first, followed by any subsystem dependency.
hunchentoot-recycling-taskmasterAn experiment to improve multithreading performance of Hunchentoot without any additional dependencies.
Yokota Yuki
BSD 2-Clause
0.0.1
hunchentoot (system).
package.lisp (file).
taskmaster.lisp (file).
acceptor.lisp (file).
abandon-server.lisp (file).
Files are sorted by type and then listed depth-first from the systems components trees.
hunchentoot-recycling-taskmaster/hunchentoot-recycling-taskmaster.asdhunchentoot-recycling-taskmaster/package.lisphunchentoot-recycling-taskmaster/taskmaster.lisphunchentoot-recycling-taskmaster/acceptor.lisphunchentoot-recycling-taskmaster/abandon-server.lisphunchentoot-recycling-taskmaster/hunchentoot-recycling-taskmaster.asdhunchentoot-recycling-taskmaster (system).
hunchentoot-recycling-taskmaster/package.lisphunchentoot-recycling-taskmaster (system).
hunchentoot-recycling-taskmaster/taskmaster.lisppackage.lisp (file).
hunchentoot-recycling-taskmaster (system).
*default-standby-thread-count* (special variable).
create-request-handler-thread (method).
execute-acceptor (method).
execute-acceptor (method).
handle-incoming-connection (method).
initialize-instance (method).
recycling-taskmaster (class).
shutdown (method).
+wake-acceptor-for-shutdown-max-retry-count+ (constant).
+wake-acceptor-for-shutdown-timeout+ (constant).
add-recycling-taskmaster-thread (method).
count-busy-thread (method).
count-recycling-taskmaster-thread (method).
delete-recycling-taskmaster-finished-thread (method).
end-of-parallel-acceptor-thread (condition).
make-parallel-acceptor-thread (method).
parallel-acceptor-thread-loop (function).
recycling-taskmaster-acceptor-process-lock (reader method).
recycling-taskmaster-busy-thread-count-cell (reader method).
(setf recycling-taskmaster-busy-thread-count-cell) (writer method).
recycling-taskmaster-shutdown-aborted-warning (condition).
recycling-taskmaster-standby-thread-count (reader method).
(setf recycling-taskmaster-standby-thread-count) (writer method).
recycling-taskmaster-thread-maker-process (reader method).
(setf recycling-taskmaster-thread-maker-process) (writer method).
recycling-taskmaster-thread-maker-requests (reader method).
(setf recycling-taskmaster-thread-maker-requests) (writer method).
remove-recycling-taskmaster-thread (method).
request-making-thread (method).
start-thread-maker-thread (method).
thread-maker-loop (function).
wake-acceptor-for-shutdown-using-listen-socket (function).
hunchentoot-recycling-taskmaster/acceptor.lisptaskmaster.lisp (file).
hunchentoot-recycling-taskmaster (system).
accept-connections (method).
parallel-acceptor (class).
parallel-easy-acceptor (class).
parallel-easy-ssl-acceptor (class).
parallel-ssl-acceptor (class).
start (method).
stop (method).
wait-for-acceptor-shutdown-queue (method).
hunchentoot-recycling-taskmaster/abandon-server.lispacceptor.lisp (file).
hunchentoot-recycling-taskmaster (system).
abandon-acceptor (method).
recycling-taskmaster-corrupted-error (condition).
abandon-taskmaster (method).
Packages are listed by definition order.
hunchentoot-recycling-taskmasteralexandria.
common-lisp.
*default-standby-thread-count* (special variable).
abandon-acceptor (generic function).
parallel-acceptor (class).
parallel-easy-acceptor (class).
parallel-easy-ssl-acceptor (class).
parallel-ssl-acceptor (class).
recycling-taskmaster (class).
recycling-taskmaster-corrupted-error (condition).
+wake-acceptor-for-shutdown-max-retry-count+ (constant).
+wake-acceptor-for-shutdown-timeout+ (constant).
abandon-taskmaster (generic function).
add-recycling-taskmaster-thread (generic function).
count-busy-thread (generic function).
count-recycling-taskmaster-thread (generic function).
delete-recycling-taskmaster-finished-thread (generic function).
end-of-parallel-acceptor-thread (condition).
make-parallel-acceptor-thread (generic function).
parallel-acceptor-thread-loop (function).
recycling-taskmaster-acceptor-process-lock (generic reader).
recycling-taskmaster-busy-thread-count-cell (generic reader).
(setf recycling-taskmaster-busy-thread-count-cell) (generic writer).
recycling-taskmaster-shutdown-aborted-warning (condition).
recycling-taskmaster-standby-thread-count (generic reader).
(setf recycling-taskmaster-standby-thread-count) (generic writer).
recycling-taskmaster-thread-maker-process (generic reader).
(setf recycling-taskmaster-thread-maker-process) (generic writer).
recycling-taskmaster-thread-maker-requests (generic reader).
(setf recycling-taskmaster-thread-maker-requests) (generic writer).
remove-recycling-taskmaster-thread (generic function).
request-making-thread (generic function).
start-thread-maker-thread (generic function).
thread-maker-loop (function).
wait-for-acceptor-shutdown-queue (generic function).
wake-acceptor-for-shutdown-using-listen-socket (function).
Definitions are sorted by export status, category, package, and then by lexicographic order.
parallel-acceptor) &key lock) ¶To force an end of ACCEPTOR, destroy all threads and the listen socket. If LOCK is nil, this is done *without* locking. This function should not be called in production (but required for my debugging).
parallel-acceptor)) ¶This works like the parental method, except some works for sharing the listen socket.
hunchentoot.
recycling-taskmaster) client-connection) ¶This method is never called for ‘recycling-taskmaster’. See ‘make-parallel-acceptor-thread’ instead.
hunchentoot.
recycling-taskmaster)) ¶Make initial threads working on ‘parallel-acceptor’.
hunchentoot.
recycling-taskmaster)) ¶Checks the type of ACCEPTOR slot, because recycling-taskmaster needs
a crafted ‘hunchentoot:accept-connections’ not using ‘usocket:with-server-socket’.
hunchentoot.
recycling-taskmaster) client-connection) ¶This function is the core of ‘recycling-taskmaster’. It is called in the loop of ‘hunchentoot:accept-connections’ on every accept(2). It processes a client-connection by itself and/or controls how many threads working around the process.
hunchentoot.
recycling-taskmaster) &rest init-args) ¶If STANDBY-THREAD-COUNT is supplied, ensure it is equal or less than other count parameters.
recycling-taskmaster)) ¶Tell every threads to shutdown.
hunchentoot.
parallel-acceptor)) ¶hunchentoot.
parallel-acceptor) &key soft) ¶This works like the parental method, except some works for sharing the listen socket.
hunchentoot.
Signalled when the object was broken by interrupts of ‘abandon-taskmaster’
acceptor.
| Initarg | Value |
|---|---|
:taskmaster | (make-instance (quote recycling-taskmaster)) |
easy-acceptor.
parallel-acceptor.
parallel-acceptor.
ssl-acceptor.
A taskmaster works like
‘hunchentoot:one-thread-per-connection-taskmaster’ except recycling
threads when there is a pending connecton.
MAX-THREAD-COUNT and MAX-ACCEPT-COUNT works same as
‘hunchentoot:one-thread-per-connection-taskmaster’.
Thread counter summary:
- The count of all threads is computed by
‘count-recycling-taskmaster-thread’.
Its lower bound is in ‘STANDBY-THREAD-COUNT’ slot.
- ‘busy-thread-count-cell’ counts threads working on a connected
socket.
They are in ‘hunchentoot:accept-connections’ and in
our ‘hunchentoot:handle-incoming-connection’.
Thread states:
1. In ‘hunchentoot:handle-incoming-connection’.
They are counted by ‘busy-thread-count-cell’.
‘hunchentoot::acceptor-shutdown-queue’ is used to wait for
they go away.
2. Waiting on the listen socket.
They can be wake by ‘wake-acceptor-for-shutdown-using-listen-socket’.
I estimate the number of them by
(- ‘count-recycling-taskmaster-thread’ ‘busy-thread-count-cell’),
but it might contain threads at the third or fourth state (below).
3. At other places in the loop of ‘hunchentoot:accept-connections’.
It rarely exists. However, when a last thread was this state just
before ‘wake-acceptor-for-shutdown-using-listen-socket’, the thread
would exit soon and
‘wake-acceptor-for-shutdown-using-listen-socket’ blocks
permanently. My ‘hunchentoot:shutdown’ considers this situation.
4. Interrupted and broken, but held by ‘hunchentoot::acceptor-process’. ‘delete-recycling-taskmaster-finished-thread’ deletes them.
one-thread-per-connection-taskmaster.
abandon-taskmaster.
create-request-handler-thread.
execute-acceptor.
execute-acceptor.
handle-incoming-connection.
initialize-instance.
make-parallel-acceptor-thread.
recycling-taskmaster-acceptor-process-lock.
(setf recycling-taskmaster-busy-thread-count-cell).
recycling-taskmaster-busy-thread-count-cell.
(setf recycling-taskmaster-standby-thread-count).
recycling-taskmaster-standby-thread-count.
(setf recycling-taskmaster-thread-maker-process).
recycling-taskmaster-thread-maker-process.
(setf recycling-taskmaster-thread-maker-requests).
recycling-taskmaster-thread-maker-requests.
shutdown.
recycling-taskmaster tracks threads using a hash-table.
hunchentoot.
hash-table
(make-hash-table :test (quote equal))
A lock for protecting acceptor-process slot.
(hunchentoot::make-lock "recycling-taskmaster-acceptor-process-lock")
This slot is read-only.
The number of threads busy on a client socket.
(bt2:make-atomic-integer)
serializing ‘bt:make-thread’
how many threads should be created
(bordeaux-threads:make-semaphore)
The number of how many threads kept on the listen socket.
integer
hunchentoot-recycling-taskmaster:*default-standby-thread-count*
:standby-thread-count
How many times ‘hunchentoot:shutdown’ retries ‘wake-acceptor-for-shutdown-using-listen-socket’.
The timeout used by ‘wake-acceptor-for-shutdown-using-listen-socket’ to avoid an accidental permanent block in our ‘hunchentoot:shutdown’.
The main loop of worker threads of ‘recycling-taskmaster’
The main loop of ’thread-maker’ made by ‘start-thread-maker-thread’.
Works like ‘hunchentoot::wake-acceptor-for-shutdown’, except takes the listen socket as an argument, apply a timeout, and utilize ‘usocket:socket-shutdown’.
recycling-taskmaster) &key lock) ¶Abandon all threads kept in TASKMASTER. This is a last resort for handling corrupted taskmaster objects.
Estimates how many threads are on client connections.
Delete dead threads kept in TASKMASTER accidentally.
recycling-taskmaster) &key thunk) ¶Makes a new thread for ‘parallel-acceptor’.
recycling-taskmaster)) ¶A lock for protecting acceptor-process slot.
recycling-taskmaster)) ¶recycling-taskmaster)) ¶The number of threads busy on a client socket.
recycling-taskmaster)) ¶recycling-taskmaster)) ¶The number of how many threads kept on the listen socket.
recycling-taskmaster)) ¶recycling-taskmaster)) ¶serializing ‘bt:make-thread’
recycling-taskmaster)) ¶recycling-taskmaster)) ¶how many threads should be created
Requests ’thread-maker’ thread to create a new thread. This is for serializing ‘make-thread’ calls.
Runs a new ’thread-maker’ thread. See comments in ‘handle-incoming-connection’ to see the reason why this is required.
Wait for a notification of ‘hunchentoot::acceptor-shutdown-queue’
Thrown when parallel-acceptor-thread ends.
condition.
Signalled when ‘hunchentoot:shutdown’ for ‘recycling-taskmaster’ gave up.
| Jump to: | (
A C D E F G H I M P R S T W |
|---|
| Jump to: | (
A C D E F G H I M P R S T W |
|---|
| Jump to: | *
+
A B C O R S T |
|---|
| Jump to: | *
+
A B C O R S T |
|---|
| Jump to: | A C E F H P R S T |
|---|
| Jump to: | A C E F H P R S T |
|---|