package main

import (
"fmt"
"math"
"strconv"
"time"
) /*
·100条协程并发求1-10000平方根
·最大并发数控制在5
·管道实现
*/ func GetSqrt(name string, n int, chSem chan string) {
//想执行,先注册
//能写入就执行,写不进去就阻塞到能写入为止
chSem <- name ret := math.Sqrt(float64(n))
time.Sleep(time.Second)
fmt.Printf("%d的平方根是%.2f\n",n , ret) //任务执行完毕,从信号量控制管道注销自己,以便为其他协程腾出空间
<- chSem
} func main() { /*
并发数(信号量)控制管道
凡要并发执行的协程必须先将协程名称注册到该管道
*/
chSem := make(chan string, 5) for i := 0; i < 100; i++ {
go GetSqrt("协程"+strconv.Itoa(i), i, chSem)
} for true {
time.Sleep(time.Second)
}
}

Go语言协程并发---管道信号量应用的更多相关文章

  1. Go语言协程并发---互斥锁sync.Mutex

    package main import ( "fmt" "sync" "time" ) /* mt.Lock() 抢锁 一次只能被一个协程锁 ...

  2. Go语言协程并发---条件变量

    package main import ( "fmt" "sync" "time" ) func main() { //要监听的变量 bit ...

  3. Go语言协程并发---读写锁sync.RWMutex

    package main import ( "fmt" "sync" "time" ) /* 读写锁 多路只读 一路只写 读写互斥 */ / ...

  4. Go语言协程并发---等待组sync.WaitGroup

    package main import ( "fmt" "sync" "time" ) /*等待组API介绍*/ func main071( ...

  5. Go语言协程并发---生产者消费者实例

    package main import ( "fmt" "strconv" "time" ) /* 改进生产者消费者模型 ·生产者每秒生产一 ...

  6. Go语言协程并发---原子操作

    package main import ( "fmt" "sync/atomic" ) /* 用原子来替换锁,其主要原因是: 原子操作由底层硬件支持,而锁则由操 ...

  7. Go语言协程并发---timer秒表与定时器

    秒表 package main import ( "fmt" "time" ) /*每秒大喊我要去浪,共9次,然后退出计时*/ func main() { va ...

  8. Go语言协程并发---select多路复用应用

    package main import ( "fmt" "time" ) /* ·循环从一写两读三条管道中随机选择一条能走的路 ·等所有路都走不通了就退出循环 ...

  9. python3通过gevent.pool限制协程并发数量

    协程虽然是轻量级的线程,但到达一定数量后,仍然会造成服务器崩溃出错.最好的方法通过限制协程并发数量来解决此类问题. server代码: #!/usr/bin/env python # -*- codi ...

随机推荐

  1. EasyCode Entity 实体类模板 IDEA

    自己修改了一份EasyCode的实体类模板,防止日后找不到在这里存一下 修改了如下内容: 取消生成GetSet方法,改用Lombok 修改默认命名规则,改为[表名Entity.java] 取消了实现序 ...

  2. 2021S软件工程——结对项目第一阶段

    # 2021S软件工程--结对项目第一阶段 2021春季软件工程(罗杰 任健) 项目地址 1020 1169 --- ## 1 结对感受 总体来说,结对编程与之前的个人编程感觉有很大的不同.有如下几个 ...

  3. VScode+Sublime安装与汉化

    两大常用编辑器安装与汉化 想敲代码?工欲善其事,必先利其器,先安装编写代码所需要的工具吧.本期的主角是VScode与Sublime,这是两款比较热门的代码编辑器. 目录: VScode安装与汉化 Su ...

  4. 功能:Java8新特性steam流

    Java8新特性steam流 一.包装数据类型 @Test public void main22() { List<Integer> list = new ArrayList<Int ...

  5. js弹窗的3种方式:alert、confirm、prompt

    <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/ ...

  6. pc/shouji/weixin判断跳转

    pc 和 手机端 判断 function IsPC() { var userAgentInfo = navigator.userAgent; var Agents = ["Android&q ...

  7. 【Redis过期Key监听】

    https://blog.csdn.net/wlddhj/article/details/89881055

  8. 【MySQL】实现线上千万数据表添加字段操作以及缓存刷新

    需求背景: 由于业务需求,需要在线上用户表添加渠道字段,用于区分不同渠道注册的用户,目前该表有20+个字段,8个索引 线上用户数据大概1500W左右,需要不停机增加数据库字段,同时需要刷新Redis缓 ...

  9. hdu4560 不错的建图,二分最大流

    题意: 我是歌手 Time Limit: 6000/2000 MS (Java/Others) Memory Limit: 65535/32768 K (Java/Others) Total Subm ...

  10. Ubuntu Linux DNS服务器 BIND9配置文件命令介绍

    BIND9配置方法 转载▼     配置语法 named.conf acl 定义访问控制列表 controls 定义rndc命令使用的控制通道,若省略,则只允许经过rndc.key认证的127.0.0 ...