BDB(3pm) User Contributed Perl Documentation BDB(3pm)NAME
Coro::BDB - truly asynchronous bdb access
SYNOPSIS
use Coro::BDB;
use BDB;
# can now use any of the bdb requests
DESCRIPTION
This module is an AnyEvent user, you need to make sure that you use and run a supported event loop.
This module implements a thin wrapper around the BDB module: Each BDB request that could block and doesn't get passed a callback will
normally block all coroutines. after loading this module, this will no longer be the case (it provides a suitable sync prepare callback).
It will also register an AnyEvent watcher as soon as AnyEvent chooses an event loop.
The AnyEvent watcher can be disabled by executing "undef $Coro::BDB::WATCHER". Please notify the author of when and why you think this was
necessary.
This module does not export anything (unlike Coro::AIO), as BDB already supports leaving out the callback. (Unfortunately, it ties a C
context to each coroutine executing such a callback, so in the future, it might export more efficient wrappers).
SEE ALSO
BDB of course.
AUTHOR
Marc Lehmann <schmorp@schmorp.de>
http://home.schmorp.de/
perl v5.14.2 2012-04-13 BDB(3pm)
Check Out this Related Man Page
LWP(3pm) User Contributed Perl Documentation LWP(3pm)NAME
Coro::LWP - make LWP non-blocking - as much as possible
SYNOPSIS
use Coro::LWP; # afterwards LWP should not block
ALTERNATIVES
Over the years, a number of less-invasive alternatives have popped up, which you might find more acceptable than this rather invasive and
fragile module. All of them only support HTTP (and sometimes HTTPS).
AnyEvent::HTTP
Works fine without Coro. Requires using a very different API than LWP. Probably the best choice iff you can do with a completely
different event-based API.
LWP::Protocol::AnyEvent::http
Makes LWP use AnyEvent::HTTP. Does not make LWP event-based, but allows Coro threads to schedule unimpeded through its AnyEvent
integration.
Let's you use the LWP API normally.
LWP::Protocol::Coro::http
Basically the same as above, distinction unclear. :)
AnyEvent::HTTP::LWP::UserAgent
A different user agent implementation, not completely transparent to users, requires Coro.
DESCRIPTION
This module is an AnyEvent user, you need to make sure that you use and run a supported event loop.
This module tries to make LWP non-blocking with respect to other coroutines as much as possible, and with whatever means it takes.
LWP really tries very hard to be blocking (and relies on a lot of undocumented functionality in IO::Socket), so this module had to be very
invasive and must be loaded very early to take the proper effect.
Note that the module AnyEvent::HTTP might offer an alternative to the full LWP that is designed to be non-blocking.
Here is what it currently does (future versions of LWP might require different tricks):
It loads Coro::Select, overwriting the perl "select" builtin globally.
This is necessary because LWP calls select quite often for timeouts and who-knows-what.
Impact: everybody else uses this (slower) version of select, too. It should be quite compatible to perls builtin select, though.
It overwrites Socket::inet_aton with Coro::Util::inet_aton.
This is necessary because LWP might (and does) try to resolve hostnames this way.
Impact: some code might not expect coroutine semantics, for example, when you fork you might prefer the blocking variant because other
coroutines shouldn't actually run.
It replaces the base class of Net::HTTP, Net::FTP, Net::NNTP.
This is necessary because LWP does not always use select to see whether a filehandle can be read/written without blocking, so the base
class "IO::Socket::INET" needs to be replaced by "Coro::Socket".
Impact: Coro::Socket is not at all compatible to IO::Socket::INET. While it duplicates some undocumented functionality required by LWP,
it does not have all the methods of IO::Socket::INET and might act quite differently in practise. Also, protocols other than the above
mentioned will still block, at least some of the time.
All this likely makes other libraries than just LWP not block, but thats just a side effect you cannot rely on.
Increases parallelism is not supported by all libraries, some might cache data globally.
AUTHOR
Marc Lehmann <schmorp@schmorp.de>
http://home.schmorp.de/
perl v5.14.2 2012-04-13 LWP(3pm)