Skip to content

Commit

Permalink
Merge pull request #747 from async-rs/fix/scheduler-perf
Browse files Browse the repository at this point in the history
Fix new scheduler loop
  • Loading branch information
yoshuawuyts authored Apr 9, 2020
2 parents fc4e472 + 0c9a66c commit aebba2b
Showing 1 changed file with 8 additions and 6 deletions.
14 changes: 8 additions & 6 deletions src/rt/runtime.rs
Original file line number Diff line number Diff line change
Expand Up @@ -249,6 +249,8 @@ impl Machine {
continue;
}

let mut sched = rt.sched.lock().unwrap();

// One final check for available tasks while the scheduler is locked.
if let Some(task) = iter::repeat_with(|| self.find_task(rt))
.find(|s| !s.is_retry())
Expand All @@ -258,19 +260,19 @@ impl Machine {
continue;
}

let mut sched = rt.sched.lock().unwrap();

// If another thread is already blocked on the reactor, there is no point in keeping
// the current thread around since there is too little work to do.
if sched.polling {
thread::sleep(Duration::from_micros(10));
continue;
break;
}

// Unlock the schedule poll the reactor until new I/O events arrive.
sched.polling = true;
drop(sched);

rt.reactor.poll(None).unwrap();

let mut sched = rt.sched.lock().unwrap();
// Lock the scheduler again and re-register the machine.
sched = rt.sched.lock().unwrap();
sched.polling = false;

runs = 0;
Expand Down

0 comments on commit aebba2b

Please sign in to comment.