… | |
… | |
460 | |
460 | |
461 | While nominally embeddable in other event loops, this doesn't work |
461 | While nominally embeddable in other event loops, this doesn't work |
462 | everywhere, so you might need to test for this. And since it is broken |
462 | everywhere, so you might need to test for this. And since it is broken |
463 | almost everywhere, you should only use it when you have a lot of sockets |
463 | almost everywhere, you should only use it when you have a lot of sockets |
464 | (for which it usually works), by embedding it into another event loop |
464 | (for which it usually works), by embedding it into another event loop |
465 | (e.g. C<EVBACKEND_SELECT> or C<EVBACKEND_POLL>) and, did I mention it, |
465 | (e.g. C<EVBACKEND_SELECT> or C<EVBACKEND_POLL> (but C<poll> is of course |
466 | using it only for sockets. |
466 | also broken on OS X)) and, did I mention it, using it only for sockets. |
467 | |
467 | |
468 | This backend maps C<EV_READ> into an C<EVFILT_READ> kevent with |
468 | This backend maps C<EV_READ> into an C<EVFILT_READ> kevent with |
469 | C<NOTE_EOF>, and C<EV_WRITE> into an C<EVFILT_WRITE> kevent with |
469 | C<NOTE_EOF>, and C<EV_WRITE> into an C<EVFILT_WRITE> kevent with |
470 | C<NOTE_EOF>. |
470 | C<NOTE_EOF>. |
471 | |
471 | |
… | |
… | |
2428 | some fds have to be watched and handled very quickly (with low latency), |
2428 | some fds have to be watched and handled very quickly (with low latency), |
2429 | and even priorities and idle watchers might have too much overhead. In |
2429 | and even priorities and idle watchers might have too much overhead. In |
2430 | this case you would put all the high priority stuff in one loop and all |
2430 | this case you would put all the high priority stuff in one loop and all |
2431 | the rest in a second one, and embed the second one in the first. |
2431 | the rest in a second one, and embed the second one in the first. |
2432 | |
2432 | |
2433 | As long as the watcher is active, the callback will be invoked every time |
2433 | As long as the watcher is active, the callback will be invoked every |
2434 | there might be events pending in the embedded loop. The callback must then |
2434 | time there might be events pending in the embedded loop. The callback |
2435 | call C<ev_embed_sweep (mainloop, watcher)> to make a single sweep and invoke |
2435 | must then call C<ev_embed_sweep (mainloop, watcher)> to make a single |
2436 | their callbacks (you could also start an idle watcher to give the embedded |
2436 | sweep and invoke their callbacks (the callback doesn't need to invoke the |
2437 | loop strictly lower priority for example). You can also set the callback |
2437 | C<ev_embed_sweep> function directly, it could also start an idle watcher |
2438 | to C<0>, in which case the embed watcher will automatically execute the |
2438 | to give the embedded loop strictly lower priority for example). |
2439 | embedded loop sweep. |
|
|
2440 | |
2439 | |
2441 | As long as the watcher is started it will automatically handle events. The |
2440 | You can also set the callback to C<0>, in which case the embed watcher |
2442 | callback will be invoked whenever some events have been handled. You can |
2441 | will automatically execute the embedded loop sweep whenever necessary. |
2443 | set the callback to C<0> to avoid having to specify one if you are not |
|
|
2444 | interested in that. |
|
|
2445 | |
2442 | |
2446 | Also, there have not currently been made special provisions for forking: |
2443 | Fork detection will be handled transparently while the C<ev_embed> watcher |
2447 | when you fork, you not only have to call C<ev_loop_fork> on both loops, |
2444 | is active, i.e., the embedded loop will automatically be forked when the |
2448 | but you will also have to stop and restart any C<ev_embed> watchers |
2445 | embedding loop forks. In other cases, the user is responsible for calling |
2449 | yourself - but you can use a fork watcher to handle this automatically, |
2446 | C<ev_loop_fork> on the embedded loop. |
2450 | and future versions of libev might do just that. |
|
|
2451 | |
2447 | |
2452 | Unfortunately, not all backends are embeddable: only the ones returned by |
2448 | Unfortunately, not all backends are embeddable: only the ones returned by |
2453 | C<ev_embeddable_backends> are, which, unfortunately, does not include any |
2449 | C<ev_embeddable_backends> are, which, unfortunately, does not include any |
2454 | portable one. |
2450 | portable one. |
2455 | |
2451 | |