title: Benchmark Go code and goroutines
body: <p>I would like to benchmark a function: <code>test()</code>, with different numbers of threads working on it.</p>
  
  <h2>Without goroutines:</h2>
  
  <pre><code>var t1 = time.Now()
  test()
  var elapsed1 = time.Since(t1)
  </code></pre>
  
  <blockquote>
    <p>1 ns / operation</p>
  </blockquote>
  
  <h2>With goroutines:</h2>
  
  <pre><code>runtime.GOMAXPROCS(1)
  var t1 = time.Now()
  go test()
  var elapsed1 = time.Since(t1)
  </code></pre>
  
  <blockquote>
    <p>1.10^-6 ns / operation</p>
  </blockquote>
  
  <h2>My test function:</h2>
  
  <pre><code>func test() {
      for i := 0; i &lt; 1000000000; i++ {
          float_result = f1 + f2
          float_result = f1 - f2
          float_result = f1 * f2
          float_result = f1 / f2
          float_result = f1 + f2
          float_result = f1 - f2
          float_result = f1 * f2
          float_result = f1 / f2
          float_result = f1 + f2
          float_result = f1 - f2
          float_result = f1 * f2
          float_result = f1 / f2
          float_result = f1 + f2
          float_result = f1 - f2
          float_result = f1 * f2
          float_result = f1 / f2
          float_result = f1 + f2
          float_result = f1 - f2
          float_result = f1 * f2
          float_result = f1 / f2
      }
  }
  </code></pre>
  
  <ul>
  <li>Is the test() function well benchmarked when I use goroutines in this case?</li>
  <li>How is it possible to reach 0.001ns / operation? It looks to be way too fast. (2.5GHz Intel Core i7)</li>
  <li>Is the use of goroutines with <code>runtime.GOMAXPROCS(n)</code> equivalent to use n threads ?</li>
  </ul>