title: Why concurrent.future executor is not using all my cores?
body: <p>Here is my snippet:</p>
  
  <pre><code>from concurrent.futures import ProcessPoolExecutor
  
  def Fun(i):
      do something
  
  with ProcessPoolExecutor(max_workers = 8) as e:
      e.map(Fun, range(10000000), chunksize = int(10000000/256))
  </code></pre>
  
  <p>I have 8 cores, however, this only uses 4 of my cores.</p>
  
  <p>When I use multiprocessing module, all of my 8 cores can be used. For example:</p>
  
  <pre><code>with Pool(8) as p:
      p.map_async(Fun, range(10000000))
      p.close()
      p.join()
  </code></pre>
  
  <p>I don't understand why. In addition, if the chunk size in the <code>e.map()</code> is too large or too small, the usage of my CPU would go down, which seems not to be a problem when using multiprocessing</p>