module Lwt_preemptive:sig
..end
Lwt
cooperative threads. It maintains an extensible pool of preemptive
threads to which you can detach computations.
When compiling or linking programs that use Lwt_preemptive
, you should
pass the -thread
or -vmthread
option. This depends on your build system.
For OCamlbuild, add true: thread
to _tags
. For OASIS, add threads
to
BuildDepends
in _oasis
.
val detach : ('a -> 'b) -> 'a -> 'b Lwt.t
detach f x
runs the computation f x
in a separate preemptive thread.
detach
evaluates to an Lwt thread, which waits for the preemptive thread
to complete.
Note that Lwt thread-local storage (i.e., Lwt.with_value
) cannot be
safely used from within f
. The same goes for most of the rest of Lwt. If
you need to run an Lwt thread in f
, use Lwt_preemptive.run_in_main
.
val run_in_main : (unit -> 'a Lwt.t) -> 'a
run_in_main f
can be called from a detached computation to execute
f ()
in the main preemptive thread, i.e. the one executing
Lwt_main.run
. run_in_main f
blocks until f ()
completes, then
returns its result. If f ()
raises an exception, run_in_main f
raises
the same exception.
Lwt.with_value
may be used inside f ()
. Lwt.get
can correctly
retrieve values set this way inside f ()
, but not values set using
Lwt.with_value
outside f ()
.
val init : int -> int -> (string -> unit) -> unit
init min max log
initialises this module. i.e. it launches the
minimum number of preemptive threads and starts the dispatcher.val simple_init : unit -> unit
simple_init ()
does a simple initialization. i.e. with
default parameters if the library is not yet initialised.
Note: this function is automatically called Lwt_preemptive.detach
.
val get_bounds : unit -> int * int
get_bounds ()
returns the minimum and the maximum number of
preemptive threads.val set_bounds : int * int -> unit
set_bounds (min, max)
set the minimum and the maximum number
of preemptive threads.val set_max_number_of_threads_queued : int -> unit
Lwt_preemptive.detach
will
sleep until a thread is available.val get_max_number_of_threads_queued : unit -> int