… | |
… | |
811 | |
811 | |
812 | By setting a higher I<io collect interval> you allow libev to spend more |
812 | By setting a higher I<io collect interval> you allow libev to spend more |
813 | time collecting I/O events, so you can handle more events per iteration, |
813 | time collecting I/O events, so you can handle more events per iteration, |
814 | at the cost of increasing latency. Timeouts (both C<ev_periodic> and |
814 | at the cost of increasing latency. Timeouts (both C<ev_periodic> and |
815 | C<ev_timer>) will be not affected. Setting this to a non-null value will |
815 | C<ev_timer>) will be not affected. Setting this to a non-null value will |
816 | introduce an additional C<ev_sleep ()> call into most loop iterations. |
816 | introduce an additional C<ev_sleep ()> call into most loop iterations. The |
|
|
817 | sleep time ensures that libev will not poll for I/O events more often then |
|
|
818 | once per this interval, on average. |
817 | |
819 | |
818 | Likewise, by setting a higher I<timeout collect interval> you allow libev |
820 | Likewise, by setting a higher I<timeout collect interval> you allow libev |
819 | to spend more time collecting timeouts, at the expense of increased |
821 | to spend more time collecting timeouts, at the expense of increased |
820 | latency/jitter/inexactness (the watcher callback will be called |
822 | latency/jitter/inexactness (the watcher callback will be called |
821 | later). C<ev_io> watchers will not be affected. Setting this to a non-null |
823 | later). C<ev_io> watchers will not be affected. Setting this to a non-null |
… | |
… | |
823 | |
825 | |
824 | Many (busy) programs can usually benefit by setting the I/O collect |
826 | Many (busy) programs can usually benefit by setting the I/O collect |
825 | interval to a value near C<0.1> or so, which is often enough for |
827 | interval to a value near C<0.1> or so, which is often enough for |
826 | interactive servers (of course not for games), likewise for timeouts. It |
828 | interactive servers (of course not for games), likewise for timeouts. It |
827 | usually doesn't make much sense to set it to a lower value than C<0.01>, |
829 | usually doesn't make much sense to set it to a lower value than C<0.01>, |
828 | as this approaches the timing granularity of most systems. |
830 | as this approaches the timing granularity of most systems. Note that if |
|
|
831 | you do transactions with the outside world and you can't increase the |
|
|
832 | parallelity, then this setting will limit your transaction rate (if you |
|
|
833 | need to poll once per transaction and the I/O collect interval is 0.01, |
|
|
834 | then you can't do more than 100 transations per second). |
829 | |
835 | |
830 | Setting the I<timeout collect interval> can improve the opportunity for |
836 | Setting the I<timeout collect interval> can improve the opportunity for |
831 | saving power, as the program will "bundle" timer callback invocations that |
837 | saving power, as the program will "bundle" timer callback invocations that |
832 | are "near" in time together, by delaying some, thus reducing the number of |
838 | are "near" in time together, by delaying some, thus reducing the number of |
833 | times the process sleeps and wakes up again. Another useful technique to |
839 | times the process sleeps and wakes up again. Another useful technique to |
834 | reduce iterations/wake-ups is to use C<ev_periodic> watchers and make sure |
840 | reduce iterations/wake-ups is to use C<ev_periodic> watchers and make sure |
835 | they fire on, say, one-second boundaries only. |
841 | they fire on, say, one-second boundaries only. |
|
|
842 | |
|
|
843 | Example: we only need 0.1s timeout granularity, and we wish not to poll |
|
|
844 | more often than 100 times per second: |
|
|
845 | |
|
|
846 | ev_set_timeout_collect_interval (EV_DEFAULT_UC_ 0.1); |
|
|
847 | ev_set_io_collect_interval (EV_DEFAULT_UC_ 0.01); |
836 | |
848 | |
837 | =item ev_loop_verify (loop) |
849 | =item ev_loop_verify (loop) |
838 | |
850 | |
839 | This function only does something when C<EV_VERIFY> support has been |
851 | This function only does something when C<EV_VERIFY> support has been |
840 | compiled in, which is the default for non-minimal builds. It tries to go |
852 | compiled in, which is the default for non-minimal builds. It tries to go |
… | |
… | |
1523 | C<after> argument to C<ev_timer_set>, and only ever use the C<repeat> |
1535 | C<after> argument to C<ev_timer_set>, and only ever use the C<repeat> |
1524 | member and C<ev_timer_again>. |
1536 | member and C<ev_timer_again>. |
1525 | |
1537 | |
1526 | At start: |
1538 | At start: |
1527 | |
1539 | |
1528 | ev_timer_init (timer, callback); |
1540 | ev_init (timer, callback); |
1529 | timer->repeat = 60.; |
1541 | timer->repeat = 60.; |
1530 | ev_timer_again (loop, timer); |
1542 | ev_timer_again (loop, timer); |
1531 | |
1543 | |
1532 | Each time there is some activity: |
1544 | Each time there is some activity: |
1533 | |
1545 | |
… | |
… | |
1595 | |
1607 | |
1596 | To start the timer, simply initialise the watcher and set C<last_activity> |
1608 | To start the timer, simply initialise the watcher and set C<last_activity> |
1597 | to the current time (meaning we just have some activity :), then call the |
1609 | to the current time (meaning we just have some activity :), then call the |
1598 | callback, which will "do the right thing" and start the timer: |
1610 | callback, which will "do the right thing" and start the timer: |
1599 | |
1611 | |
1600 | ev_timer_init (timer, callback); |
1612 | ev_init (timer, callback); |
1601 | last_activity = ev_now (loop); |
1613 | last_activity = ev_now (loop); |
1602 | callback (loop, timer, EV_TIMEOUT); |
1614 | callback (loop, timer, EV_TIMEOUT); |
1603 | |
1615 | |
1604 | And when there is some activity, simply store the current time in |
1616 | And when there is some activity, simply store the current time in |
1605 | C<last_activity>, no libev calls at all: |
1617 | C<last_activity>, no libev calls at all: |
… | |
… | |
2002 | some child status changes (most typically when a child of yours dies or |
2014 | some child status changes (most typically when a child of yours dies or |
2003 | exits). It is permissible to install a child watcher I<after> the child |
2015 | exits). It is permissible to install a child watcher I<after> the child |
2004 | has been forked (which implies it might have already exited), as long |
2016 | has been forked (which implies it might have already exited), as long |
2005 | as the event loop isn't entered (or is continued from a watcher), i.e., |
2017 | as the event loop isn't entered (or is continued from a watcher), i.e., |
2006 | forking and then immediately registering a watcher for the child is fine, |
2018 | forking and then immediately registering a watcher for the child is fine, |
2007 | but forking and registering a watcher a few event loop iterations later is |
2019 | but forking and registering a watcher a few event loop iterations later or |
2008 | not. |
2020 | in the next callback invocation is not. |
2009 | |
2021 | |
2010 | Only the default event loop is capable of handling signals, and therefore |
2022 | Only the default event loop is capable of handling signals, and therefore |
2011 | you can only register child watchers in the default event loop. |
2023 | you can only register child watchers in the default event loop. |
2012 | |
2024 | |
2013 | =head3 Process Interaction |
2025 | =head3 Process Interaction |
… | |
… | |
2471 | struct pollfd fds [nfd]; |
2483 | struct pollfd fds [nfd]; |
2472 | // actual code will need to loop here and realloc etc. |
2484 | // actual code will need to loop here and realloc etc. |
2473 | adns_beforepoll (ads, fds, &nfd, &timeout, timeval_from (ev_time ())); |
2485 | adns_beforepoll (ads, fds, &nfd, &timeout, timeval_from (ev_time ())); |
2474 | |
2486 | |
2475 | /* the callback is illegal, but won't be called as we stop during check */ |
2487 | /* the callback is illegal, but won't be called as we stop during check */ |
2476 | ev_timer_init (&tw, 0, timeout * 1e-3); |
2488 | ev_timer_init (&tw, 0, timeout * 1e-3, 0.); |
2477 | ev_timer_start (loop, &tw); |
2489 | ev_timer_start (loop, &tw); |
2478 | |
2490 | |
2479 | // create one ev_io per pollfd |
2491 | // create one ev_io per pollfd |
2480 | for (int i = 0; i < nfd; ++i) |
2492 | for (int i = 0; i < nfd; ++i) |
2481 | { |
2493 | { |