ViewVC Help
View File | Revision Log | Show Annotations | Download File
/cvs/Coro/README
(Generate patch)

Comparing Coro/README (file contents):
Revision 1.25 by root, Tue Jun 30 08:28:55 2009 UTC vs.
Revision 1.27 by root, Fri Dec 25 07:17:12 2009 UTC

37 easily-identified points in your program, so locking and parallel access 37 easily-identified points in your program, so locking and parallel access
38 are rarely an issue, making thread programming much safer and easier 38 are rarely an issue, making thread programming much safer and easier
39 than using other thread models. 39 than using other thread models.
40 40
41 Unlike the so-called "Perl threads" (which are not actually real threads 41 Unlike the so-called "Perl threads" (which are not actually real threads
42 but only the windows process emulation ported to unix, and as such act 42 but only the windows process emulation (see section of same name for
43 as processes), Coro provides a full shared address space, which makes 43 more details) ported to unix, and as such act as processes), Coro
44 communication between threads very easy. And Coro's threads are fast, 44 provides a full shared address space, which makes communication between
45 threads very easy. And Coro's threads are fast, too: disabling the
45 too: disabling the Windows process emulation code in your perl and using 46 Windows process emulation code in your perl and using Coro can easily
46 Coro can easily result in a two to four times speed increase for your 47 result in a two to four times speed increase for your programs. A
47 programs. A parallel matrix multiplication benchmark runs over 300 times 48 parallel matrix multiplication benchmark runs over 300 times faster on a
48 faster on a single core than perl's pseudo-threads on a quad core using 49 single core than perl's pseudo-threads on a quad core using all four
49 all four cores. 50 cores.
50 51
51 Coro achieves that by supporting multiple running interpreters that 52 Coro achieves that by supporting multiple running interpreters that
52 share data, which is especially useful to code pseudo-parallel processes 53 share data, which is especially useful to code pseudo-parallel processes
53 and for event-based programming, such as multiple HTTP-GET requests 54 and for event-based programming, such as multiple HTTP-GET requests
54 running concurrently. See Coro::AnyEvent to learn more on how to 55 running concurrently. See Coro::AnyEvent to learn more on how to
82 $Coro::idle 83 $Coro::idle
83 This variable is mainly useful to integrate Coro into event loops. 84 This variable is mainly useful to integrate Coro into event loops.
84 It is usually better to rely on Coro::AnyEvent or Coro::EV, as this 85 It is usually better to rely on Coro::AnyEvent or Coro::EV, as this
85 is pretty low-level functionality. 86 is pretty low-level functionality.
86 87
87 This variable stores either a Coro object or a callback. 88 This variable stores a Coro object that is put into the ready queue
89 when there are no other ready threads (without invoking any ready
90 hooks).
88 91
89 If it is a callback, the it is called whenever the scheduler finds 92 The default implementation dies with "FATAL: deadlock detected.",
90 no ready coros to run. The default implementation prints "FATAL: 93 followed by a thread listing, because the program has no other way
91 deadlock detected" and exits, because the program has no other way
92 to continue. 94 to continue.
93
94 If it is a coro object, then this object will be readied (without
95 invoking any ready hooks, however) when the scheduler finds no other
96 ready coros to run.
97 95
98 This hook is overwritten by modules such as "Coro::EV" and 96 This hook is overwritten by modules such as "Coro::EV" and
99 "Coro::AnyEvent" to wait on an external event that hopefully wake up 97 "Coro::AnyEvent" to wait on an external event that hopefully wake up
100 a coro so the scheduler can run it. 98 a coro so the scheduler can run it.
101 99
102 Note that the callback *must not*, under any circumstances, block
103 the current coro. Normally, this is achieved by having an "idle
104 coro" that calls the event loop and then blocks again, and then
105 readying that coro in the idle handler, or by simply placing the
106 idle coro in this variable.
107
108 See Coro::Event or Coro::AnyEvent for examples of using this 100 See Coro::EV or Coro::AnyEvent for examples of using this technique.
109 technique.
110
111 Please note that if your callback recursively invokes perl (e.g. for
112 event handlers), then it must be prepared to be called recursively
113 itself.
114 101
115SIMPLE CORO CREATION 102SIMPLE CORO CREATION
116 async { ... } [@args...] 103 async { ... } [@args...]
117 Create a new coro and return its Coro object (usually unused). The 104 Create a new coro and return its Coro object (usually unused). The
118 coro will be put into the ready queue, so it will start running 105 coro will be put into the ready queue, so it will start running
181 168
182 schedule 169 schedule
183 Calls the scheduler. The scheduler will find the next coro that is 170 Calls the scheduler. The scheduler will find the next coro that is
184 to be run from the ready queue and switches to it. The next coro to 171 to be run from the ready queue and switches to it. The next coro to
185 be run is simply the one with the highest priority that is longest 172 be run is simply the one with the highest priority that is longest
186 in its ready queue. If there is no coro ready, it will clal the 173 in its ready queue. If there is no coro ready, it will call the
187 $Coro::idle hook. 174 $Coro::idle hook.
188 175
189 Please note that the current coro will *not* be put into the ready 176 Please note that the current coro will *not* be put into the ready
190 queue, so calling this function usually means you will never be 177 queue, so calling this function usually means you will never be
191 called again unless something else (e.g. an event handler) calls 178 called again unless something else (e.g. an event handler) calls
487 reentrancy). This means you must not block within event callbacks, 474 reentrancy). This means you must not block within event callbacks,
488 otherwise you might suffer from crashes or worse. The only event 475 otherwise you might suffer from crashes or worse. The only event
489 library currently known that is safe to use without "unblock_sub" is 476 library currently known that is safe to use without "unblock_sub" is
490 EV. 477 EV.
491 478
479 Coro will try to catch you when you block in the event loop
480 ("FATAL:$Coro::IDLE blocked itself"), but this is just best effort
481 and only works when you do not run your own event loop.
482
492 This function allows your callbacks to block by executing them in 483 This function allows your callbacks to block by executing them in
493 another coro where it is safe to block. One example where blocking 484 another coro where it is safe to block. One example where blocking
494 is handy is when you use the Coro::AIO functions to save results to 485 is handy is when you use the Coro::AIO functions to save results to
495 disk, for example. 486 disk, for example.
496 487
506 when you use a module that uses AnyEvent (and you use 497 when you use a module that uses AnyEvent (and you use
507 Coro::AnyEvent) and it provides callbacks that are the result of 498 Coro::AnyEvent) and it provides callbacks that are the result of
508 some event callback, then you must not block either, or use 499 some event callback, then you must not block either, or use
509 "unblock_sub". 500 "unblock_sub".
510 501
511 $cb = Coro::rouse_cb 502 $cb = rouse_cb
512 Create and return a "rouse callback". That's a code reference that, 503 Create and return a "rouse callback". That's a code reference that,
513 when called, will remember a copy of its arguments and notify the 504 when called, will remember a copy of its arguments and notify the
514 owner coro of the callback. 505 owner coro of the callback.
515 506
516 See the next function. 507 See the next function.
517 508
518 @args = Coro::rouse_wait [$cb] 509 @args = rouse_wait [$cb]
519 Wait for the specified rouse callback (or the last one that was 510 Wait for the specified rouse callback (or the last one that was
520 created in this coro). 511 created in this coro).
521 512
522 As soon as the callback is invoked (or when the callback was invoked 513 As soon as the callback is invoked (or when the callback was invoked
523 before "rouse_wait"), it will return the arguments originally passed 514 before "rouse_wait"), it will return the arguments originally passed
608 unix roughly halves perl performance, even when not used. 599 unix roughly halves perl performance, even when not used.
609 600
610 coro switching is not signal safe 601 coro switching is not signal safe
611 You must not switch to another coro from within a signal handler 602 You must not switch to another coro from within a signal handler
612 (only relevant with %SIG - most event libraries provide safe 603 (only relevant with %SIG - most event libraries provide safe
613 signals). 604 signals), *unless* you are sure you are not interrupting a Coro
605 function.
614 606
615 That means you *MUST NOT* call any function that might "block" the 607 That means you *MUST NOT* call any function that might "block" the
616 current coro - "cede", "schedule" "Coro::Semaphore->down" or 608 current coro - "cede", "schedule" "Coro::Semaphore->down" or
617 anything that calls those. Everything else, including calling 609 anything that calls those. Everything else, including calling
618 "ready", works. 610 "ready", works.
619 611
612WINDOWS PROCESS EMULATION
613 A great many people seem to be confused about ithreads (for example,
614 Chip Salzenberg called me unintelligent, incapable, stupid and gullible,
615 while in the same mail making rather confused statements about perl
616 ithreads (for example, that memory or files would be shared), showing
617 his lack of understanding of this area - if it is hard to understand for
618 Chip, it is probably not obvious to everybody).
619
620 What follows is an ultra-condensed version of my talk about threads in
621 scripting languages given onthe perl workshop 2009:
622
623 The so-called "ithreads" were originally implemented for two reasons:
624 first, to (badly) emulate unix processes on native win32 perls, and
625 secondly, to replace the older, real thread model ("5.005-threads").
626
627 It does that by using threads instead of OS processes. The difference
628 between processes and threads is that threads share memory (and other
629 state, such as files) between threads within a single process, while
630 processes do not share anything (at least not semantically). That means
631 that modifications done by one thread are seen by others, while
632 modifications by one process are not seen by other processes.
633
634 The "ithreads" work exactly like that: when creating a new ithreads
635 process, all state is copied (memory is copied physically, files and
636 code is copied logically). Afterwards, it isolates all modifications. On
637 UNIX, the same behaviour can be achieved by using operating system
638 processes, except that UNIX typically uses hardware built into the
639 system to do this efficiently, while the windows process emulation
640 emulates this hardware in software (rather efficiently, but of course it
641 is still much slower than dedicated hardware).
642
643 As mentioned before, loading code, modifying code, modifying data
644 structures and so on is only visible in the ithreads process doing the
645 modification, not in other ithread processes within the same OS process.
646
647 This is why "ithreads" do not implement threads for perl at all, only
648 processes. What makes it so bad is that on non-windows platforms, you
649 can actually take advantage of custom hardware for this purpose (as
650 evidenced by the forks module, which gives you the (i-) threads API,
651 just much faster).
652
653 Sharing data is in the i-threads model is done by transfering data
654 structures between threads using copying semantics, which is very slow -
655 shared data simply does not exist. Benchmarks using i-threads which are
656 communication-intensive show extremely bad behaviour with i-threads (in
657 fact, so bad that Coro, which cannot take direct advantage of multiple
658 CPUs, is often orders of magnitude faster because it shares data using
659 real threads, refer to my talk for details).
660
661 As summary, i-threads *use* threads to implement processes, while the
662 compatible forks module *uses* processes to emulate, uhm, processes.
663 I-threads slow down every perl program when enabled, and outside of
664 windows, serve no (or little) practical purpose, but disadvantages every
665 single-threaded Perl program.
666
667 This is the reason that I try to avoid the name "ithreads", as it is
668 misleading as it implies that it implements some kind of thread model
669 for perl, and prefer the name "windows process emulation", which
670 describes the actual use and behaviour of it much better.
671
620SEE ALSO 672SEE ALSO
621 Event-Loop integration: Coro::AnyEvent, Coro::EV, Coro::Event. 673 Event-Loop integration: Coro::AnyEvent, Coro::EV, Coro::Event.
622 674
623 Debugging: Coro::Debug. 675 Debugging: Coro::Debug.
624 676

Diff Legend

Removed lines
+ Added lines
< Changed lines
> Changed lines