go语言协程并发---管道信号量应用

xiaoqiang1_1 xiaoqiang1_1     2022-12-25     405

关键词:

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)
	

 

2021-go语言并发编程

2021-GO语言并发编程1、Go语言并发概述2、GO语言多进程编程3、Go语言并发简略-多线程4、Go语言并发简略-非阻塞IO5、Go语言并发简略-协程6、并发简略-对比并发模型7、Go语言goroutine8、Go语言channel9、Go语言channel的操作10、Go语言channel... 查看详情

七天入门go语言通道&goroutine|第四天并发编程(代码片段)

1.前言在go社区有这样一句话不要通过共享内存来通信,而是通过通信来共享内存。go官方是建议使用管道通信的方式来进行并发。通道是用于协程间交流的通信载体。严格地来说,通道就是数据传输的管道,数据通过... 查看详情

go语言协程并发---select多路复用应用

packagemainimport( "fmt" "time")/*·循环从一写两读三条管道中随机选择一条能走的路·等所有路都走不通了就退出循环*/funcmain041() chA:=make(chanint,5) chB:=make(chanint,4) chB<-123 chB<-123 chB<-123 chB<-123 chC:=make(chanint,3) chC<-123 chC... 查看详情

go协程(代码片段)

Go协程是什么?Go协程是与其他函数或方法一起并发运行的函数或方法。Go协程可以看作是轻量级线程。与线程相比,创建一个Go协程的成本很小。因此在Go应用中,常常会看到有数以千计的Go协程并发地运行。Go协程相比于线程的... 查看详情

go语言快速入门ipc之管道通信8

...IPC也非常的熟悉,多进程之间的通信主要的手段有管道/信号量/共享内存/Socket等,而管道作为父子进程间进行少量数据传递的有效手段也得到了广泛的应用,在这篇文章中我们来看一下go语言中如何使用管道进行进程进行通信。... 查看详情

go语言并发编程(代码片段)

一、goroutine与传统的系统级线程和进程相比,协程的大优势在于其“轻量级”,可以轻松创建上百万个而不会导致系统资源衰竭,而线程和进程通常多也不能超过1万个。这也是协程也叫轻量级线程的原因。golang原生支持并发编... 查看详情

go语言学习笔记—进阶—并发编程:go语言的协程goroutine,与普通程序的协程coroutine

拿Python程序的coroutine与Go程序的goroutine做比较,两者都可以把函数或语句运行在独立的环境,但还是有不同点:goroutine可能并行执行,但coroutine始终顺序执行狭义地说,goroutine可能发生在多线程环境下。goroutine... 查看详情

go协程(代码片段)

什么是Go协程?Go协程是与其他函数或方法一起并发运行的函数或方法。Go协程可以看作是轻量级线程。与线程相比,创建一个Go协程的成本很小。因此在Go应用中,常常会看到有数以千计的Go协程并发地运行。packagemainimport("fmt""tim... 查看详情

go语言学习一

golang语言特性:1、天然并发a.从语言层面支持并发,非常简单。b.goroute,轻量级线程,创建成千上万个goroute成为可能。c.基于CSP(CommunicationSequentialProcess通讯序列进程)模型实现。CSP:每个goroute之间通过管道(channel,类似linux/unix中... 查看详情

go并发编程

...不能超过一万个,这也是协程叫轻量级线程的原因.  Go语言在语言级别支持轻量级线程,叫go 查看详情

go语言管道(channel)(代码片段)

前言        channel式go语言协程中数据通信的双向通道。但是在实际应用中,为了代码的简单和易懂,一般使用的channel是单向的。使用1.channel的定义和收发数据packagechannelfuncmain() //varcchanintc的默认值位nil,一般不... 查看详情

go语言并发编程简单入门

并发是逻辑上具备同时处理多个任务的能力,并行是在物理上的同一时刻执行多个并发任务。在单核处理器上,它们可以使用间隔的方式切换执行,并行则是依赖多核处理器的物理设备的特性。并行计算是并发设计的最理想模式... 查看详情

go并发模式:管道与取消

关键字:Go语言,管道,取消机制,并发,sync.WaitGroup,包引用,通道,defer,selectGO并发模式:管道与取消简介Go的并发能力可以使构建一个流数据管道变得非常容易,并且可以高校地使用机器I/O和多核处理器。这篇文章展示了... 查看详情

golang✔️走进go语言✔️第十六课协程&通道(代码片段)

【Golang】✔️走进Go语言✔️第十六课协程&通道概述协程并发vs并行进程vs线程vs协程协程并发通道创建通道通道同步概述Golang是一个跨平台的新生编程语言.今天小白就带大家一起携手走进Golang的世界.(第16课)协程协程(Coroutine)... 查看详情

golang✔️走进go语言✔️第十六课协程&通道(代码片段)

【Golang】✔️走进Go语言✔️第十六课协程&通道概述协程并发vs并行进程vs线程vs协程协程并发通道创建通道通道同步概述Golang是一个跨平台的新生编程语言.今天小白就带大家一起携手走进Golang的世界.(第16课)协程协程(Coroutine)... 查看详情

golang教程:goroutine协程(代码片段)

...并行的区别。在这篇教程中我们将讨论在Go中如何通过Go协程实现并发。什么是协程Go协程(Goroutine)是与其他函数或方法同时运行的函数或方法。可以认为Go协程是轻量级的线程。与创建线程相比,创建Go协程的成本很小。因此... 查看详情

go并发编程之协程及其调度机制

协程(coroutine)是Go语言最大的特色之一,goroutine的实现其实是通过协程。协程的概念协程一词最早出现在1963年发表的论文中,该论文的作者为美国计算机科学家MelvinE.Conway。著名的康威定律:“设计系统的架构受制于产生这些... 查看详情

云原生时代崛起的编程语言go并发编程实战(代码片段)

Go语言是天然并发利器,通过通信来实现内存共享而不是通过共享内存来通信,本篇从了解Go的并发哲学、理论及并发原语开始,之后用一个个Go代码示例认识Go的协程、通道、定时器、互斥锁、池化、原生操作等十几个并发编程... 查看详情