]> Cypherpunks repositories - gostls13.git/commitdiff
FAQ: more words about why GOMAXPROCS>1 might not speed you up
authorRob Pike <r@golang.org>
Thu, 26 Jan 2012 22:44:38 +0000 (14:44 -0800)
committerRob Pike <r@golang.org>
Thu, 26 Jan 2012 22:44:38 +0000 (14:44 -0800)
R=golang-dev, adg, gri
CC=golang-dev
https://golang.org/cl/5572067

doc/go_faq.html

index 33e5cde41a16cab8a7eedcd0c6e50339ff9c2f2b..93e1ea4ee518673e163d73572f0694ef71e116ce 100644 (file)
@@ -1020,10 +1020,23 @@ slower?</h3>
 
 <p>
 It depends on the nature of your program. 
-Programs that contain several goroutines that spend a lot of time
-communicating on channels will experience performance degradation when using
-multiple OS threads. This is because of the significant context-switching
-penalty involved in sending data between threads.
+Problems that are intrinsically sequential cannot be sped up by adding
+more goroutines.
+Concurrency only becomes parallelism when the problem is
+intrinsically parallel.
+</p>
+
+<p>
+In practical terms, programs that spend more time
+communicating on channels than doing computation
+will experience performance degradation when using
+multiple OS threads.
+This is because sending data between threads involves switching
+contexts, which has significant cost.
+For instance, the <a href="/doc/go_spec.html#An_example_package">prime sieve example</a>
+from the Go specification has no significant parallelism although it launches many
+goroutines; increasing <code>GOMAXPROCS</code> is more likely to slow it down than
+to speed it up.
 </p>
 
 <p>