go的多线程并发策略
package main
import (
"fmt"
"io/ioutil"
"net/http"
"time"
//"sync"
)
func Done(id) {
//参数为默认
client := &http.Client{} //生成要访问的url
url := fmt.Sprintf("http://a.b.c?a=1&b=%s",id) //提交请求/request 请求连接
//get请求
reqest, err := http.NewRequest("GET", url, nil) //增加header选项
//post请求
/*
reqest, err := http.NewRequest("POST", url,strings.NewReader("a=xxx")) //增加header选项
*/
reqest.Header.Add("Cookie","");
reqest.Header.Add("User-Agent", "Mozilla/5.0")
reqest.Header.Add("X-Requested-With", "XMLHttpRequest")
if err != nil {
panic(err)
}
//处理返回结果
response, _ := client.Do(reqest)
body, err := ioutil.ReadAll(response.Body)
if err != nil {
// handle error
}
fmt.Println(string(body))
defer response.Body.Close()
}
func ThreadP() {
loopNum := 5
//开启三个线程,说明线程池中只有三个线程, 在实际情况下可以动态设置开启线程数量
for w := 1; w <= loopNum; w++ {
//go worker(w, jobs, results)
go Done(1); //id=1
}
}
func ThreadY() {
loopNum := 2
//开启三个线程,说明线程池中只有三个线程, 在实际情况下可以动态设置开启线程数量
for w := 1; w <= loopNum; w++ {
//go worker(w, jobs, results)
go Done(1); //id=1
}
}
func main() {
/*var wg sync.WaitGroup
loop :=1
wg.Add(16);
for i :=0;i<=loop;i++{
go func(i int) {
ThreadP()
//ThreadY()
wg.Done()
}(i)
}
wg.Wait()
*/
for w := 1; w <= 3; w++ {
//go worker(w, jobs, results)
Done(1) //id =1
time.Sleep(1*time.Second)
}
}
/*func main() {
wg := sync.WaitGroup{}
wg.Add(2)
for i := 0; i < 3; i++ {
go func(i int) {
//fmt.Println(i)
Done()
wg.Done()
}(i)
}
wg.Wait()
}*/