Created
December 20, 2023 16:31
-
-
Save osiewicz/cd7358f1cc7cf50543cac1f4e0b85c53 to your computer and use it in GitHub Desktop.
async-task excessive monomorphization example (https://github.com/smol-rs/async-task/issues/66)
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
[package] | |
name = "async-task-stresstest" | |
version = "0.1.0" | |
edition = "2021" | |
[dependencies] | |
# Apply the provided patch to the local copy of async-task. | |
async-task = {path = "../../async-task"} |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
fn main() { | |
let (_, _) = async_task::spawn(async move {}, |_| {}); | |
let (_, _) = async_task::spawn(async move {}, |_| {}); | |
let (_, _) = async_task::spawn(async move {}, |_| {}); | |
let (_, _) = async_task::spawn(async move {}, |_| {}); | |
let (_, _) = async_task::spawn(async move {}, |_| {}); | |
let (_, _) = async_task::spawn(async move {}, |_| {}); | |
let (_, _) = async_task::spawn(async move {}, |_| {}); | |
let (_, _) = async_task::spawn(async move {}, |_| {}); | |
let (_, _) = async_task::spawn(async move {}, |_| {}); | |
let (_, _) = async_task::spawn(async move {}, |_| {}); | |
let (_, _) = async_task::spawn(async move {}, |_| {}); | |
let (_, _) = async_task::spawn(async move {}, |_| {}); | |
let (_, _) = async_task::spawn(async move {}, |_| {}); | |
let (_, _) = async_task::spawn(async move {}, |_| {}); | |
let (_, _) = async_task::spawn(async move {}, |_| {}); | |
let (_, _) = async_task::spawn(async move {}, |_| {}); | |
let (_, _) = async_task::spawn(async move {}, |_| {}); | |
let (_, _) = async_task::spawn(async move {}, |_| {}); | |
let (_, _) = async_task::spawn(async move {}, |_| {}); | |
let (_, _) = async_task::spawn(async move {}, |_| {}); | |
let (_, _) = async_task::spawn(async move {}, |_| {}); | |
let (_, _) = async_task::spawn(async move {}, |_| {}); | |
let (_, _) = async_task::spawn(async move {}, |_| {}); | |
let (_, _) = async_task::spawn(async move {}, |_| {}); | |
let (_, _) = async_task::spawn(async move {}, |_| {}); | |
let (_, _) = async_task::spawn(async move {}, |_| {}); | |
let (_, _) = async_task::spawn(async move {}, |_| {}); | |
let (_, _) = async_task::spawn(async move {}, |_| {}); | |
let (_, _) = async_task::spawn(async move {}, |_| {}); | |
let (_, _) = async_task::spawn(async move {}, |_| {}); | |
} |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
diff --git a/src/runnable.rs b/src/runnable.rs | |
index 8b1b062..b413d58 100644 | |
--- a/src/runnable.rs | |
+++ b/src/runnable.rs | |
@@ -6,7 +6,7 @@ use core::ptr::NonNull; | |
use core::sync::atomic::Ordering; | |
use core::task::Waker; | |
-use alloc::boxed::Box; | |
+//use alloc::boxed::Box; | |
use crate::header::Header; | |
use crate::raw::RawTask; | |
@@ -513,16 +513,7 @@ impl<M> Builder<M> { | |
M: 'a, | |
{ | |
// Allocate large futures on the heap. | |
- let ptr = if mem::size_of::<Fut>() >= 2048 { | |
- let future = |meta| { | |
- let future = future(meta); | |
- Box::pin(future) | |
- }; | |
- | |
- RawTask::<_, Fut::Output, S, M>::allocate(future, schedule, self) | |
- } else { | |
- RawTask::<Fut, Fut::Output, S, M>::allocate(future, schedule, self) | |
- }; | |
+ let ptr = { RawTask::<Fut, Fut::Output, S, M>::allocate(future, schedule, self) }; | |
let runnable = Runnable { | |
ptr, |
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment