go 使用信号量判断多个协程处理完毕

package main

import (
   "fmt"
   "net/http"
   "time"
)

var urls = []string{
   "http://www.baidu.com/",
   "http://www.clearloveuzi.cn/",
   "http://www.sina.com/",
}

把上面那个给换了种方式判断协程处理完(信号量-the way to go)
func main() {
   // Execute an HTTP HEAD request for all url's
   // and returns the HTTP status string or an error string.
   stime:=time.Now().UnixNano()


   chan1:=make(chan bool)

   for _, url := range urls {
      //fmt.Println("aaaaa",url)
      go func(url string) {
         stime1:=time.Now().UnixNano()

         resp, err := http.Head(url)
         if err != nil {
            fmt.Println("Error:", url, err)
         }
         etime1:=time.Now().UnixNano()

         fmt.Println(url, ": ", resp.Status,"--",(etime1-stime1)  / 1e6)

         chan1<-true
         //close(chan1)
      }(url)
   }


   for i:=0;i<len(urls);i++{
      _,ok:=<-chan1
      fmt.Println(ok)
   }

         //<-chan1
         //<-chan1
         //<-chan1
         //<-chan1//todo 多一个就不会退出程序了哦  会一直阻塞  
            //todo important 注意 ! 这里也不能用go协程单独运行哦  必须在主程序阻塞这个队列


   //       for i:=range chan1{  //todo  range 会一直阻塞住
   // fmt.Println(i)
   //}

   etime:=time.Now().UnixNano()
   fmt.Println("allfuck",(etime-stime)  / 1e6)

}

您可以自由的转载和修改,但请务必注明文章来源并且不可用于商业目的。
本站大部分内容收集于互联网,如果有侵权内容、不妥之处,请联系删除。敬请谅解!

添加新评论

  关于博主【WANG-FEiHU】

Duplicate
-----------Complicate
--------------------------Appreciate
-----------------------------------------Fate

闻先后,术专攻
三人有师
习得文武艺,货与帝王家
人性不曾变,资本永无眠

-----------花有重开日,人无再少年-----------

  分类目录

  monitor(TD)

每个人心里都有一段伤痕,时间才是最好的疗剂。

人总是珍惜未得到的,而遗忘了所拥有的。

看铁蹄铮铮,踏遍万里河山,我站在风口浪尖紧握住,日月旋转

人生有两大痛苦:一是愿望得不到满足,二是愿望得到了满足。

往前一步是黄昏,退后一步是人生

你美目如当年 流转我心间

人海中再回首,朋友真诚依旧,生命里重逢,心境平和温柔,往事如风,岁月如歌,漫漫人生路,苍桑几许,幸福几何!