2
\$\begingroup\$

I wanted to test the performance of concurrent http request in Go against node.js:

package main
import (
 "fmt"
 "time"
 "strconv"
 "net/http"
)
var responseCounter = 0
var requestCounter = 0
var count=0
var ch = make(chan int)
func sendRequest(){
 go func() {
 requestCounter++
 url := "https://www.google.co.in/#q=search_" +strconv.Itoa(requestCounter)
 resp, err := http.Get(url)
 if err != nil {
 fmt.Printf("\nError",err)
 }
 defer resp.Body.Close()
 count++
 ch <- count
 sendRequest()
 }()
}
func main() {
 for i := 1; i<100; i++{
 sendRequest()
 }
 for {
 select {
 case r := <-ch:
 fmt.Printf("\nChannel ",r)
 case <-time.After(50 * time.Millisecond):
 //sendRequest()
 }
 }
}

When I run this code the CPU usage goes very high (around 90%). Is there something wrong with this code? Have I used the Goroutines correctly?

Jamal
35.2k13 gold badges134 silver badges238 bronze badges
asked Jan 8, 2015 at 12:34
\$\endgroup\$
4
  • \$\begingroup\$ but you start infinitely many goroutines in your sendRequest, no? \$\endgroup\$ Commented Jan 9, 2015 at 16:29
  • \$\begingroup\$ I did so because I wanted the requests to be continuous. So when one http request is complete I made another request by calling sendRequest(). Is there a better way to achieve this? \$\endgroup\$ Commented Jan 10, 2015 at 15:52
  • \$\begingroup\$ try to wait for the goroutine to finish and then start another one. I do not know what is going on... \$\endgroup\$ Commented Jan 10, 2015 at 16:19
  • \$\begingroup\$ So many data races!! (go {build,install,run,test} -race is your friend). \$\endgroup\$ Commented Apr 12, 2015 at 17:00

1 Answer 1

7
\$\begingroup\$

Inside SendRequst you are calling SendRequest again, which will make your stack full of recursive calls.

answered Aug 11, 2016 at 11:46
\$\endgroup\$

Your Answer

Draft saved
Draft discarded

Sign up or log in

Sign up using Google
Sign up using Email and Password

Post as a guest

Required, but never shown

Post as a guest

Required, but never shown

By clicking "Post Your Answer", you agree to our terms of service and acknowledge you have read our privacy policy.

Start asking to get answers

Find the answer to your question by asking.

Ask question

Explore related questions

See similar questions with these tags.