This looks similar to Twisted in Python (http://twistedmatrix.com/trac/) and NodeJS (http://nodejs.org/) which are both non-blocking event driven IO engines.

The actual event driven side of things could be written today in PHP. There's nothing stopping you from writing an event call stack that manages call backs.

The problem will occur when you try to do any IO in a asynchronous manner. As far as I know all of the PHP IO operations happen in sync (there is a pause in the script while waiting for the IO event to return.)

So, basically async versions of all the needed IO calls (MySQL, MemCache, FileIO etc) would need to be created which can handle a callback function. These could be done initially with PECL modules. (no reason to touch the core to get these working).

Apparently (according to Ryan Dahl of NodeJs) making async calls isn't as easy as it could be. Especially in MySQL as the base MySQL libraries in C are blocking (synchronous).

If you're interested in non-blocking IO, I recommend watching the videos on NodeJs.org



On 05/08/2011 02:54, Raymond Irving wrote:
Hello,

I came across this little library called TameJS (http://tamejs.org/) and
fell in love with the it's syntax. This had me thinking if it was possible
to add such features to a PHP CLI (or web app):

<?php

await { // wait until all calls within this block is
     mysql_query_async($sql, $args, defer($rs)); // call asynchronous query
     curl_post_async($url,$data, defer($response)); // make asynchronous http
request
}
$rows = $rs->fetchAll();
// do something here

?>

The "await" keyword marks a section of code that depends on externals
events, like network or disk activity, or a timer. An await block contains
one or more calls to defer.

I think the above syntax makes it easier to write asynchronous apps that can
take advantage of multiple threads or processors


What do you think?


__
Raymond


--
PHP Internals - PHP Runtime Development Mailing List
To unsubscribe, visit: http://www.php.net/unsub.php

Reply via email to