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

Comparing Coro/README (file contents):
Revision 1.24 by root, Tue Jun 23 23:40:06 2009 UTC vs.
Revision 1.28 by root, Sun Feb 13 04:39:15 2011 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
424 "terminate" or "cancel" functions. "join" can be called concurrently 411 "terminate" or "cancel" functions. "join" can be called concurrently
425 from multiple coro, and all will be resumed and given the status 412 from multiple coro, and all will be resumed and given the status
426 return once the $coro terminates. 413 return once the $coro terminates.
427 414
428 $coro->on_destroy (\&cb) 415 $coro->on_destroy (\&cb)
429 Registers a callback that is called when this coro gets destroyed, 416 Registers a callback that is called when this coro thread gets
430 but before it is joined. The callback gets passed the terminate 417 destroyed, but before it is joined. The callback gets passed the
431 arguments, if any, and *must not* die, under any circumstances. 418 terminate arguments, if any, and *must not* die, under any
419 circumstances.
420
421 There can be any number of "on_destroy" callbacks per coro.
432 422
433 $oldprio = $coro->prio ($newprio) 423 $oldprio = $coro->prio ($newprio)
434 Sets (or gets, if the argument is missing) the priority of the coro. 424 Sets (or gets, if the argument is missing) the priority of the coro
435 Higher priority coro get run before lower priority coro. Priorities 425 thread. Higher priority coro get run before lower priority coros.
436 are small signed integers (currently -4 .. +3), that you can refer 426 Priorities are small signed integers (currently -4 .. +3), that you
437 to using PRIO_xxx constants (use the import tag :prio to get then): 427 can refer to using PRIO_xxx constants (use the import tag :prio to
428 get then):
438 429
439 PRIO_MAX > PRIO_HIGH > PRIO_NORMAL > PRIO_LOW > PRIO_IDLE > PRIO_MIN 430 PRIO_MAX > PRIO_HIGH > PRIO_NORMAL > PRIO_LOW > PRIO_IDLE > PRIO_MIN
440 3 > 1 > 0 > -1 > -3 > -4 431 3 > 1 > 0 > -1 > -3 > -4
441 432
442 # set priority to HIGH 433 # set priority to HIGH
443 current->prio (PRIO_HIGH); 434 current->prio (PRIO_HIGH);
444 435
445 The idle coro ($Coro::idle) always has a lower priority than any 436 The idle coro thread ($Coro::idle) always has a lower priority than
446 existing coro. 437 any existing coro.
447 438
448 Changing the priority of the current coro will take effect 439 Changing the priority of the current coro will take effect
449 immediately, but changing the priority of coro in the ready queue 440 immediately, but changing the priority of a coro in the ready queue
450 (but not running) will only take effect after the next schedule (of 441 (but not running) will only take effect after the next schedule (of
451 that coro). This is a bug that will be fixed in some future version. 442 that coro). This is a bug that will be fixed in some future version.
452 443
453 $newprio = $coro->nice ($change) 444 $newprio = $coro->nice ($change)
454 Similar to "prio", but subtract the given value from the priority 445 Similar to "prio", but subtract the given value from the priority
455 (i.e. higher values mean lower priority, just as in unix). 446 (i.e. higher values mean lower priority, just as in UNIX's nice
447 command).
456 448
457 $olddesc = $coro->desc ($newdesc) 449 $olddesc = $coro->desc ($newdesc)
458 Sets (or gets in case the argument is missing) the description for 450 Sets (or gets in case the argument is missing) the description for
459 this coro. This is just a free-form string you can associate with a 451 this coro thread. This is just a free-form string you can associate
460 coro. 452 with a coro.
461 453
462 This method simply sets the "$coro->{desc}" member to the given 454 This method simply sets the "$coro->{desc}" member to the given
463 string. You can modify this member directly if you wish. 455 string. You can modify this member directly if you wish, and in
456 fact, this is often preferred to indicate major processing states
457 that cna then be seen for example in a Coro::Debug session:
458
459 sub my_long_function {
460 local $Coro::current->{desc} = "now in my_long_function";
461 ...
462 $Coro::current->{desc} = "my_long_function: phase 1";
463 ...
464 $Coro::current->{desc} = "my_long_function: phase 2";
465 ...
466 }
464 467
465GLOBAL FUNCTIONS 468GLOBAL FUNCTIONS
466 Coro::nready 469 Coro::nready
467 Returns the number of coro that are currently in the ready state, 470 Returns the number of coro that are currently in the ready state,
468 i.e. that can be switched to by calling "schedule" directory or 471 i.e. that can be switched to by calling "schedule" directory or
485 The reason this function exists is that many event libraries (such 488 The reason this function exists is that many event libraries (such
486 as the venerable Event module) are not thread-safe (a weaker form of 489 as the venerable Event module) are not thread-safe (a weaker form of
487 reentrancy). This means you must not block within event callbacks, 490 reentrancy). This means you must not block within event callbacks,
488 otherwise you might suffer from crashes or worse. The only event 491 otherwise you might suffer from crashes or worse. The only event
489 library currently known that is safe to use without "unblock_sub" is 492 library currently known that is safe to use without "unblock_sub" is
490 EV. 493 EV (but you might still run into deadlocks if all event loops are
494 blocked).
495
496 Coro will try to catch you when you block in the event loop
497 ("FATAL:$Coro::IDLE blocked itself"), but this is just best effort
498 and only works when you do not run your own event loop.
491 499
492 This function allows your callbacks to block by executing them in 500 This function allows your callbacks to block by executing them in
493 another coro where it is safe to block. One example where blocking 501 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 502 is handy is when you use the Coro::AIO functions to save results to
495 disk, for example. 503 disk, for example.
506 when you use a module that uses AnyEvent (and you use 514 when you use a module that uses AnyEvent (and you use
507 Coro::AnyEvent) and it provides callbacks that are the result of 515 Coro::AnyEvent) and it provides callbacks that are the result of
508 some event callback, then you must not block either, or use 516 some event callback, then you must not block either, or use
509 "unblock_sub". 517 "unblock_sub".
510 518
511 $cb = Coro::rouse_cb 519 $cb = rouse_cb
512 Create and return a "rouse callback". That's a code reference that, 520 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 521 when called, will remember a copy of its arguments and notify the
514 owner coro of the callback. 522 owner coro of the callback.
515 523
516 See the next function. 524 See the next function.
517 525
518 @args = Coro::rouse_wait [$cb] 526 @args = rouse_wait [$cb]
519 Wait for the specified rouse callback (or the last one that was 527 Wait for the specified rouse callback (or the last one that was
520 created in this coro). 528 created in this coro).
521 529
522 As soon as the callback is invoked (or when the callback was invoked 530 As soon as the callback is invoked (or when the callback was invoked
523 before "rouse_wait"), it will return the arguments originally passed 531 before "rouse_wait"), it will return the arguments originally passed
524 to the rouse callback. 532 to the rouse callback. In scalar context, that means you get the
533 *last* argument, just as if "rouse_wait" had a "return ($a1, $a2,
534 $a3...)" statement at the end.
525 535
526 See the section HOW TO WAIT FOR A CALLBACK for an actual usage 536 See the section HOW TO WAIT FOR A CALLBACK for an actual usage
527 example. 537 example.
528 538
529HOW TO WAIT FOR A CALLBACK 539HOW TO WAIT FOR A CALLBACK
606 unix roughly halves perl performance, even when not used. 616 unix roughly halves perl performance, even when not used.
607 617
608 coro switching is not signal safe 618 coro switching is not signal safe
609 You must not switch to another coro from within a signal handler 619 You must not switch to another coro from within a signal handler
610 (only relevant with %SIG - most event libraries provide safe 620 (only relevant with %SIG - most event libraries provide safe
611 signals). 621 signals), *unless* you are sure you are not interrupting a Coro
622 function.
612 623
613 That means you *MUST NOT* call any function that might "block" the 624 That means you *MUST NOT* call any function that might "block" the
614 current coro - "cede", "schedule" "Coro::Semaphore->down" or 625 current coro - "cede", "schedule" "Coro::Semaphore->down" or
615 anything that calls those. Everything else, including calling 626 anything that calls those. Everything else, including calling
616 "ready", works. 627 "ready", works.
617 628
629WINDOWS PROCESS EMULATION
630 A great many people seem to be confused about ithreads (for example,
631 Chip Salzenberg called me unintelligent, incapable, stupid and gullible,
632 while in the same mail making rather confused statements about perl
633 ithreads (for example, that memory or files would be shared), showing
634 his lack of understanding of this area - if it is hard to understand for
635 Chip, it is probably not obvious to everybody).
636
637 What follows is an ultra-condensed version of my talk about threads in
638 scripting languages given on the perl workshop 2009:
639
640 The so-called "ithreads" were originally implemented for two reasons:
641 first, to (badly) emulate unix processes on native win32 perls, and
642 secondly, to replace the older, real thread model ("5.005-threads").
643
644 It does that by using threads instead of OS processes. The difference
645 between processes and threads is that threads share memory (and other
646 state, such as files) between threads within a single process, while
647 processes do not share anything (at least not semantically). That means
648 that modifications done by one thread are seen by others, while
649 modifications by one process are not seen by other processes.
650
651 The "ithreads" work exactly like that: when creating a new ithreads
652 process, all state is copied (memory is copied physically, files and
653 code is copied logically). Afterwards, it isolates all modifications. On
654 UNIX, the same behaviour can be achieved by using operating system
655 processes, except that UNIX typically uses hardware built into the
656 system to do this efficiently, while the windows process emulation
657 emulates this hardware in software (rather efficiently, but of course it
658 is still much slower than dedicated hardware).
659
660 As mentioned before, loading code, modifying code, modifying data
661 structures and so on is only visible in the ithreads process doing the
662 modification, not in other ithread processes within the same OS process.
663
664 This is why "ithreads" do not implement threads for perl at all, only
665 processes. What makes it so bad is that on non-windows platforms, you
666 can actually take advantage of custom hardware for this purpose (as
667 evidenced by the forks module, which gives you the (i-) threads API,
668 just much faster).
669
670 Sharing data is in the i-threads model is done by transfering data
671 structures between threads using copying semantics, which is very slow -
672 shared data simply does not exist. Benchmarks using i-threads which are
673 communication-intensive show extremely bad behaviour with i-threads (in
674 fact, so bad that Coro, which cannot take direct advantage of multiple
675 CPUs, is often orders of magnitude faster because it shares data using
676 real threads, refer to my talk for details).
677
678 As summary, i-threads *use* threads to implement processes, while the
679 compatible forks module *uses* processes to emulate, uhm, processes.
680 I-threads slow down every perl program when enabled, and outside of
681 windows, serve no (or little) practical purpose, but disadvantages every
682 single-threaded Perl program.
683
684 This is the reason that I try to avoid the name "ithreads", as it is
685 misleading as it implies that it implements some kind of thread model
686 for perl, and prefer the name "windows process emulation", which
687 describes the actual use and behaviour of it much better.
688
618SEE ALSO 689SEE ALSO
619 Event-Loop integration: Coro::AnyEvent, Coro::EV, Coro::Event. 690 Event-Loop integration: Coro::AnyEvent, Coro::EV, Coro::Event.
620 691
621 Debugging: Coro::Debug. 692 Debugging: Coro::Debug.
622 693

Diff Legend

Removed lines
+ Added lines
< Changed lines
> Changed lines