A convenience function for profiling multiple threads, combining start-profiling and stop-profiling.
do-profiling &key initialize processes profile-waiting ignore-in-foreign sleep function arguments func-and-args print stream
A boolean.
One of
:current
,
:all
, a
mp:process
or a list of
mp:process
objects.
A boolean.
A boolean.
A non-negative number, or
nil
.
A function designator.
Arguments passed to function .
A function designator or a list
(
function-designator
.
args
)
.
A generalized boolean.
An output stream.
The function
do-profiling
is a convenience function for profiling multiple threads, combining start-profiling and stop-profiling.
The behavior of
do-profiling
with no arguments is the same as:
(progn
(start-profiling :processes :all)
(sleep 6)
(stop-profiling))
The arguments
initialize
,
processes
,
profile-waiting
and
ignore-in-foreign
are passed to start-profiling. They have the same default values as for start-profiling, except
processes
which defaults to
:all
.
The arguments print and stream are passed to stop-profiling. They have the same default values as in stop-profiling.
sleep
is the time to sleep in seconds. If
sleep
is
nil
or 0
do-profiling
does not sleep. Also, if
sleep
is supplied and either
function
or
func-and-args
are passed, it does not sleep.
func-and-args
, and
function
together with
arguments
, can both be used for calling a function you supply.
func-and-args
is either a list of the form
(
function-designator
.
args
)
, in which case
function-designator
is applied to the
args
, or it is a function designator which is called without arguments.
function
is applied to
arguments
.
The order of execution is first
func-and-args
(if this is non-nil), then
function
togeth with
arguments
if
function
is non-nil, and then sleep if
sleep
was passed explicitly or both
function
and
func-and-args
are
nil
.
To profile whatever happens in the next 6 seconds:
(hcl:do-profiling)
To profile whatever happens in the next 10 minutes:
(hcl:do-profiling :sleep 600)
To run 4 processes in parallel with the same function and profile until they all die:
(defun check-all-processes-died (processes)
(dolist (p processes t)
(when (mp:process-alive-p p)
(return nil))))
(let ((processes
(loop for x below 4
collect
(mp:process-run-function
(format nil "my process ~a" x)
() 'my-function))))
(hcl:do-profiling
:func-and-args
(list 'mp:process-wait
"Waiting for processes to finish"
'check-all-process-died
processes)))