LMPX.COM |
Home | Linux | Mysql | PHP | XML | ||
|
|
|||
From: Sam Vilain Date: Thu Dec 8 19:17:05 2005 Subject: Re: Another feature request...
On Thu, 2005-12-08 at 23:51 +0000, Tim Bunce wrote: > On Tue, Dec 06, 2005 at 01:57:58PM +1300, Sam Vilain wrote: > > How about co-operation with coroutines (See the end of S17 in > > pugs/docs/AES) in DBI v2 ? > > > > Of course it would be heavily driver dependent :). But if there is > > anything that DBI could do to be coro-safe, that would be cool. > > Can you expand on this with some practical examples? How about "simple" to start off with. This one launches three queries "in parallel". my $dbh = DBI.connect(...); $dbh.begin_work; my @coros; for (1..3) { my $coro = coro { my $sth = $dbh.prepare(...); $sth.execute; for =$sth -> $row { # process result... } $sth.finish; }; $coro.ready; push @coros, $coro; } $_.join foreach @coros; $dbh.commit; Now, to understand this program, remember that a coroutine is a bit like a thread, but it doesn't need another process or OS thread; instead it uses defined preemption points. Coroutines don't suck in practical use like OS threads, because no matter how "lightweight" they are because you still need to protect access to all common data structures with locks, semaphores, etc. The preemption points in the above are taken to be; the "join" (which waits for a coro to finish), and all the $dbh and $sth operations. Of course the Coroutine API is not finished so I made up .join and .ready. If the DBD is capable of handling multiple statements with a single database connection, then it could conceivably multiplex the execution of the blocks as data is returned. Otherwise, the first one's .prepare or .execute will not return until the lock is freed by the $sth.finish call. It is not acceptable to open separate database handles, because a transaction is open. Then again, if the driver doesn't support multiplexing, but supports cursors (and DBIv2 is capable of turning selects into cursors when it needs to), then cursors could be used to allow the parallelism. Does that explain much, or would something "practical" be better? Sam.
| Navigate in group perl.dbi2.dev at sever nntp.perl.org | |
| Previous | Next |
| © No Copyright You are free to use Anything |
Site Maintained by PHP Developer
Powered By PHP Consultants |