Talk About Network



Register and Login
Nick
Password
Register create new account Sign up is FREE and you can post replies, new topics, bookmark posts and more!
Recover lost password


Programming > Perl Cvs P5ee > [svn:p5ee] r104...
Latest [ Topics | Posts ] Archive Post A New Topic Post a Reply
<< Topic < Post Post 1 of 1 Topic 631 of 694
Post > Topic >>

[svn:p5ee] r10418 - p5ee/trunk/App-Context/lib/App/Context/POE

by spadkins@[EMAIL PROTECTED] Dec 12, 2007 at 08:39 AM

Author: spadkins
Date: Wed Dec 12 08:39:17 2007
New Revision: 10418

Modified:
   p5ee/trunk/App-Context/lib/App/Context/POE/Server.pm

Log:
attempt to resolve the constant calling of poe_event_loop_extension when
there is not work to be done

Modified: p5ee/trunk/App-Context/lib/App/Context/POE/Server.pm
==============================================================================
--- p5ee/trunk/App-Context/lib/App/Context/POE/Server.pm	(original)
+++ p5ee/trunk/App-Context/lib/App/Context/POE/Server.pm	Wed Dec 12
08:39:17 2007
@[EMAIL PROTECTED]
 -995,19 +995,37 @[EMAIL PROTECTED]
     my ( $self, $kernel, $heap ) = @[EMAIL PROTECTED]
 OBJECT, KERNEL, HEAP ];
     $self->log({level=>2},"POE: poe_event_loop_extension\n") if
$self->{options}{poe_trace};
     my $event_loop_extensions = $self->{event_loop_extensions};
-    my $async_event_added = 0;
+    my $async_events_added = 0;
     if ($event_loop_extensions && $#$event_loop_extensions > -1) {
-        my ($extension, $obj, $method, $args, $event_executed);
+        my ($extension, $obj, $method, $args, $events_executed);
         for (my $i = 0; $i <= $#$event_loop_extensions; $i++) {
             $extension = $event_loop_extensions->[$i];
             ($obj, $method, $args) = @[EMAIL PROTECTED]
            $event_executed = $obj->$method(@[EMAIL PROTECTED]
);  # execute extension
-            $async_event_added = 1 if ($event_executed);
+            $events_executed = $obj->$method(@[EMAIL PROTECTED]
);  # execute
extension
+            $async_events_added += $events_executed;
         }
     }
     $self->poe_yield($kernel, "poe_dispatch_pending_async_events", undef,
"poe_event_loop_extension");
-    ### TODO: Do we want to constrain this if there is nothing to do (to
prevent spinning unnecessary cycles)?
-    $kernel->yield("poe_event_loop_extension");
+
+    ### We want to delay this if there is nothing to do (to prevent
spinning unnecessary cycles constantly)
+
+    ### This was a bad first attempt, for some reason it always delayed,
+    ### even when there was splitting work to be done
+    #$self->log({level=>2}, "Server : poe_event_loop_extension :
async_events_added[$async_events_added] pending_async_events[" .
@[EMAIL PROTECTED]
>{pending_async_events}} . "]\n");
+    #if ($async_events_added || @[EMAIL PROTECTED]
>{pending_async_events}} > 0) {
+
+    ### This attempt keeps the splitting running, but when work finishes
+    ### some capacity on a node might go underutilized until the delay
passes
+    ### Another downside is it tightly couples this implementation in an
abstract class
+    $self->log({level=>2}, "Server : poe_event_loop_extension :
async_events_added[$async_events_added] clear_pending[" .
$self->count_in_pending_async_events("mvworkd",
"_clear_pending_hotel_shop_requests") . "]\n");
+    if ($async_events_added ||
$self->count_in_pending_async_events("mvworkd",
"_clear_pending_hotel_shop_requests") > 0) {
+        $kernel->yield("poe_event_loop_extension");
+    }
+    else {
+        my $delay = .5;
+        $self->log({level=>2}, "Server : poe_event_loop_extension :
delaying $delay seconds\n");
+        $kernel->delay_set("poe_event_loop_extension", $delay);
+    }
 
     &App::sub_exit() if ($App::trace);
 }




 1 Posts in Topic:
[svn:p5ee] r10418 - p5ee/trunk/App-Context/lib/App/Context/POE
spadkins@[EMAIL PROTECTED  2007-12-12 08:39:18 

Post A Reply:
  Go here to Signup

AddThis Feed Button


About - Advertising - Contact - Frequently Asked Questions - Privacy Policy - Terms of Use - Signup

Contact
tan12V112 Tue May 13 6:10:43 CDT 2008.