1Select(3) User Contributed Perl Documentation Select(3)
2
3
4
6 Coro::Select - a (slow but coro-aware) replacement for CORE::select
7
9 use Coro::Select; # replace select globally (be careful, see below)
10 use Core::Select 'select'; # only in this module
11 use Coro::Select (); # use Coro::Select::select
12
14 This module tries to create a fully working replacement for perl's
15 "select" built-in, using "AnyEvent" watchers to do the job, so other
16 threads can run in parallel to any select user. As many libraries that
17 only have a blocking API do not use global variables and often use
18 select (or IO::Select), this effectively makes most such libraries
19 "somewhat" non-blocking w.r.t. other threads.
20
21 This implementation works fastest when only very few bits are set in
22 the fd set(s).
23
24 To be effective globally, this module must be "use"'d before any other
25 module that uses "select", so it should generally be the first module
26 "use"'d in the main program. Note that overriding "select" globally
27 might actually cause problems, as some "AnyEvent" backends use "select"
28 themselves, and asking AnyEvent to use Coro::Select, which in turn asks
29 AnyEvent will not quite work.
30
31 You can also invoke it from the commandline as "perl -MCoro::Select".
32
33 To override select only for a single module (e.g.
34 "Net::DBus::Reactor"), use a code fragment like this to load it:
35
36 {
37 package Net::DBus::Reactor;
38 use Coro::Select qw(select);
39 use Net::DBus::Reactor;
40 }
41
42 Some modules (notably POE::Loop::Select) directly call "CORE::select".
43 For these modules, we need to patch the opcode table by sandwiching it
44 between calls to "Coro::Select::patch_pp_sselect" and
45 "Coro::Select::unpatch_pp_sselect":
46
47 BEGIN {
48 use Coro::Select ();
49 Coro::Select::patch_pp_sselect;
50 require evil_poe_module_using_CORE::SELECT;
51 Coro::Select::unpatch_pp_sselect;
52 }
53
55 For performance reasons, Coro::Select's select function might not
56 properly detect bad file descriptors (but relying on EBADF is
57 inherently non-portable).
58
60 Coro::LWP.
61
63 Marc A. Lehmann <schmorp@schmorp.de>
64 http://software.schmorp.de/pkg/Coro.html
65
66
67
68perl v5.32.0 2020-08-03 Select(3)