title: How to run multiple futures that call thread::sleep in parallel?
body: <p>I have a slow future that blocks for 1 second before running to completion.</p>
  
  <p>I've tried to use the <code>join</code> combinator but the composite future <code>my_app</code> executes the futures sequentially:</p>
  
  <pre><code>#![feature(pin, futures_api, arbitrary_self_types)]
  
  extern crate futures; // v0.3
  
  use futures::prelude::*;
  use futures::task::Context;
  use std::pin::PinMut;
  use std::{thread, time};
  use futures::executor::ThreadPoolBuilder;
  
  struct SlowComputation {}
  
  impl Future for SlowComputation {
      type Output = ();
  
      fn poll(self: PinMut&lt;Self&gt;, _cx: &amp;mut Context) -&gt; Poll&lt;Self::Output&gt; {
          let millis = time::Duration::from_millis(1000);
          thread::sleep(millis);
  
          Poll::Ready(())
      }
  }
  
  fn main() {
      let fut1 = SlowComputation {};
      let fut2 = SlowComputation {};
      let my_app = fut1.join(fut2);
  
      ThreadPoolBuilder::new()
          .pool_size(5)
          .create()
          .expect("Failed to create threadpool")
          .run(my_app);
  }
  </code></pre>
  
  <p>Why does <code>join</code> work like that? I expected the futures to be spawned on different threads.</p>
  
  <p>What is the right way to obtain my goal?</p>
  
  <p>Cargo.toml:</p>
  
  <pre><code>[dependencies]
  futures-preview = "0.3.0-alfa.6"
  </code></pre>
  
  <p>Result:</p>
  
  <pre class="lang-none prettyprint-override"><code>$ time target/debug/futures03
  
  real    0m2.004s
  user    0m0.000s
  sys 0m0.004s
  </code></pre>