Welcome to the Treehouse Community
Want to collaborate on code errors? Have bugs you need feedback on? Looking for an extra set of eyes on your latest project? Get support with fellow developers, designers, and programmers of all backgrounds and skill levels here with the Treehouse Community! While you're at it, check out some resources Treehouse students have shared here.
Looking to learn something new?
Treehouse offers a seven day free trial for new students. Get access to thousands of hours of content and join thousands of Treehouse students and alumni in the community today.
Start your free trialAlexander Davison
65,469 PointsWhy doesn't anything print out from the goroutine?
At around 02:19 in the video, nothing prints out, even though there are print statements in the longTask()
function. Why is this? Please help! Thank you! :)
~Alex
2 Answers
Jennifer Nordell
Treehouse TeacherHi there, Alexander Davison ! This was touched on just after this point in the video.
But you can see that our program's not producing any out put now. The problem is that as soon as the main go routine finishes, the program exits. So the other go routines don't get a chance to do anything.
And it's essentially this (as I understand it): these things are all happening simultaneously, The main
routine asks the other routine to run 3 times, but once it asks them to do that... it exits completely. It takes longer for the routine that's printing to do its thing than it takes the main to say "Hey, run this 3 times, thanks". It's why a "sleep" was added later so that the program will wait until the others have finished.
Hope this helps!
Alexander Davison
65,469 PointsThanks!
Anthony Albertorio
22,624 PointsThink about it like juggling. The normal way would throw one ball in the air. Wait for it to drop back (network response). Then throw the next ball in the air, wait for that.
With concurrency, we can throw multiple balls in the air, while waiting for the next one to drop. The more hands you have (cores) the more balls you can juggle.
Now for a more concrete explanation: The normal flow of operations would be linear: main(), THEN task()1 THEN task()2 ... etc.
However, with currency, all the tasks start together. So main(), task1(), task2(), ... taskN() all start about the same time.
The concurrent flow of operations would be: main() AND task1() AND task()2 ... etc.
Since main() is the first and main goroutine for the program when it stops, everything stops. If it stops before task1(), task2(), taskN(), then the program exits.
We will see how channels helps solves this problem in the next video.
Hope this helps!
Steven Parker
231,275 PointsSteven Parker
231,275 PointsHi, I got your request. But it looks like Jennifer's already got you covered.
Happy coding!