From: bors Date: Tue, 6 Aug 2013 17:32:00 +0000 (-0700) Subject: auto merge of #8317 : bblum/rust/fast-spawn-unlinked, r=brson X-Git-Url: https://git.lizzy.rs/?a=commitdiff_plain;h=72080954b9deb3a6a5f793d2fd1ef32c3d5acb5d;p=rust.git auto merge of #8317 : bblum/rust/fast-spawn-unlinked, r=brson This lazily initializes the taskgroup structs for ```spawn_unlinked``` tasks. If such a task never spawns another task linked to it (or a descendant of it), its taskgroup is simply never initialized at all. Also if an unlinked task spawns another unlinked task, neither of them will need to initialize their taskgroups. This works for the main task too. I benchmarked this with the following test case and observed a ~~21% speedup (average over 4 runs: 7.85 sec -> 6.20 sec, 2.5 GHz)~~ 11% speedup, see comment below. ``` use std::task; use std::cell::Cell; use std::rt::comm; static NUM: uint = 1024*256; fn run(f: ~fn()) { let mut t = task::task(); t.unlinked(); t.spawn(f); } fn main() { do NUM.times { let (p,c) = comm::oneshot(); let c = Cell::new(c); do run { c.take().send(()); } p.recv(); } } ``` --- 72080954b9deb3a6a5f793d2fd1ef32c3d5acb5d