mirror of
https://github.com/tokio-rs/tokio.git
synced 2026-08-27 00:00:12 +02:00
wip
This commit is contained in:
@@ -559,7 +559,9 @@ impl Worker {
|
|||||||
// Signal shutdown
|
// Signal shutdown
|
||||||
self.shutdown_core(cx, core);
|
self.shutdown_core(cx, core);
|
||||||
|
|
||||||
debug_assert!(cx.defer.borrow().is_empty());
|
// It is possible that tasks wake others during drop, so we need to
|
||||||
|
// clear the defer list.
|
||||||
|
self.shutdown_clear_defer(cx);
|
||||||
|
|
||||||
Err(())
|
Err(())
|
||||||
}
|
}
|
||||||
@@ -688,7 +690,6 @@ impl Worker {
|
|||||||
if core.num_seq_local_queue_polls % core.global_queue_interval == 0 {
|
if core.num_seq_local_queue_polls % core.global_queue_interval == 0 {
|
||||||
core.num_seq_local_queue_polls = 0;
|
core.num_seq_local_queue_polls = 0;
|
||||||
|
|
||||||
println!(" + next_notified_task; REMOTE FIRST");
|
|
||||||
// Update the global queue interval, if needed
|
// Update the global queue interval, if needed
|
||||||
self.tune_global_queue_interval(cx, core);
|
self.tune_global_queue_interval(cx, core);
|
||||||
|
|
||||||
@@ -966,6 +967,7 @@ impl Worker {
|
|||||||
|
|
||||||
fn maybe_maintenance(&mut self, cx: &Context, mut core: Box<Core>) -> NextTaskResult {
|
fn maybe_maintenance(&mut self, cx: &Context, mut core: Box<Core>) -> NextTaskResult {
|
||||||
if core.tick % cx.shared().config.event_interval == 0 {
|
if core.tick % cx.shared().config.event_interval == 0 {
|
||||||
|
println!(" + MAINT {}", core.tick);
|
||||||
super::counters::inc_num_maintenance();
|
super::counters::inc_num_maintenance();
|
||||||
|
|
||||||
core.stats.end_processing_scheduled_tasks();
|
core.stats.end_processing_scheduled_tasks();
|
||||||
@@ -994,23 +996,21 @@ impl Worker {
|
|||||||
}
|
}
|
||||||
|
|
||||||
fn park_yield(&mut self, cx: &Context, mut core: Box<Core>) -> NextTaskResult {
|
fn park_yield(&mut self, cx: &Context, mut core: Box<Core>) -> NextTaskResult {
|
||||||
println!(" + park_yield; tick={}", core.tick);
|
|
||||||
let mut maybe_task = None;
|
|
||||||
|
|
||||||
// Call `park` with a 0 timeout. This enables the I/O driver, timer, ...
|
// Call `park` with a 0 timeout. This enables the I/O driver, timer, ...
|
||||||
// to run without actually putting the thread to sleep.
|
// to run without actually putting the thread to sleep.
|
||||||
if let Some(mut driver) = cx.shared().driver.take() {
|
if let Some(mut driver) = cx.shared().driver.take() {
|
||||||
|
println!(" + DRIVER POLL");
|
||||||
driver.park_timeout(&cx.handle.driver, Duration::from_millis(0));
|
driver.park_timeout(&cx.handle.driver, Duration::from_millis(0));
|
||||||
|
|
||||||
cx.shared().driver.set(driver);
|
cx.shared().driver.set(driver);
|
||||||
|
|
||||||
// If there are more I/O events, schedule them.
|
|
||||||
let res = self.schedule_deferred_with_core(cx, core, || cx.shared().synced.lock())?;
|
|
||||||
|
|
||||||
maybe_task = res.0;
|
|
||||||
core = res.1;
|
|
||||||
}
|
}
|
||||||
|
|
||||||
|
// If there are more I/O events, schedule them.
|
||||||
|
let res = self.schedule_deferred_with_core(cx, core, || cx.shared().synced.lock())?;
|
||||||
|
|
||||||
|
let maybe_task = res.0;
|
||||||
|
core = res.1;
|
||||||
|
|
||||||
self.flush_metrics(cx, &mut core);
|
self.flush_metrics(cx, &mut core);
|
||||||
self.update_global_flags(cx, &mut cx.shared().synced.lock(), &mut core);
|
self.update_global_flags(cx, &mut cx.shared().synced.lock(), &mut core);
|
||||||
|
|
||||||
@@ -1278,16 +1278,21 @@ impl Shared {
|
|||||||
}
|
}
|
||||||
|
|
||||||
fn schedule_local(&self, core: &mut Core, task: Notified) {
|
fn schedule_local(&self, core: &mut Core, task: Notified) {
|
||||||
// Push to the LIFO slot
|
if core.lifo_enabled {
|
||||||
let prev = core.lifo_slot.take();
|
// Push to the LIFO slot
|
||||||
|
let prev = core.lifo_slot.take();
|
||||||
|
|
||||||
if let Some(prev) = prev {
|
if let Some(prev) = prev {
|
||||||
|
core.run_queue
|
||||||
|
.push_back_or_overflow(prev, self, &mut core.stats);
|
||||||
|
}
|
||||||
|
|
||||||
|
core.lifo_slot = Some(task);
|
||||||
|
} else {
|
||||||
core.run_queue
|
core.run_queue
|
||||||
.push_back_or_overflow(prev, self, &mut core.stats);
|
.push_back_or_overflow(task, self, &mut core.stats);
|
||||||
}
|
}
|
||||||
|
|
||||||
core.lifo_slot = Some(task);
|
|
||||||
|
|
||||||
self.notify_parked_local();
|
self.notify_parked_local();
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
Reference in New Issue
Block a user