博主信息
Sky
博文
291
粉丝
0
评论
0
访问量
6839
积分:0
P豆:617

Go并发之CSP并发模型、协程并发

2021年10月19日 18:20:28阅读数:15博客 / Sky

什么是CSP并发模型

CSP 即通信顺序进程、交谈循序程序,又被译为交换消息的循序程序(communicating sequential processes),它是一种用来描述并发性系统之间进行交互的模型。

CSP模型的最大优点是灵活。但是容易出现死锁的情况,且未给予直接的并行支持,并行需要建立在并发的基础之上。

在CSP模型里面,进程间需要经过一种被称为管道来进行通信。

什么是管道,两个并发任务不需要共享内存,而是通过建立一条点对点的管道,数据用完之后,管道立即撤销。有了管道,不需要事先锁,而是需要用数据时建立管道。不需要数据时就撤销管道了。

管道与共享内存之间有很大的区别,内存共享是通过内存来共享内存,而手机号码买卖平台管道是通过通信来共享内存。所以管道通信比内存共享效率要高很多。

协程

coroutine就是协程,也称为go程。通过管道能够实现百万级的并发。如果说线程是抢占式的,那么协程是协作式的。在协程里面,也是通过管道来调度的。解放线程对CPU和内存的开销,线程是先占用CPU和内存后才调度,而协程是通过通信发送信号来调度,协程全是通过管道,由于协程的消耗比线程小很多,所以能够实现百万并发。

在协程中,IO操作时绝大部分时间与CPU无关,这是管道带来的优势,不需要长时间锁住内存,也不需要CPU来做调度。

8G内存的电脑,用JAVA,C来做并发,差不多也就千级并发,而用GO语言,通过管道可以让并发能力得到很大提升。


版权申明:本博文版权归博主所有,转载请注明地址!如有侵权、违法,请联系admin@php.cn举报处理!

全部评论

文明上网理性发言,请遵守新闻评论服务协议

条评论
  • 下面由golang教栏目给大家介绍 Go Mutex,希望对需要的朋友有所帮助!我们比较常见的大项目的设计中都会出现访问问题,就是为了解决数据的准确性...
    Go语言属于静态编译语言。go语言是Google开的一种静态强类、编译具有垃圾回收功能的编语言,Go是基于Inferno操作系统所开的。
    go语言不是脚本语言,而是静态编译语言;go语言是Google开的一种静态强类、编译具有垃圾回收功能的编语言,Go是基于Inferno操作系统所开的。
    python和go语言的区别:1、python是基于面向对象编的多范式,Go是基于范式的过语言;2、python是动态类语言,Go是静态类语言;3、python没有提供内置的机制
    go语言适合用在云计算、容器虚拟化、分布式存储、网络爬虫、运维开、web开、区块链等领域。go语言尤其擅长,它是一种静态强类、编译具有垃圾回收功能的编语言。
    Docker是采用Go语言编写的,Go语言一种静态强类、编译具有垃圾回收功能的编语言,其特点代码简洁、支持高微线以及更多的基本类,该语言一般用于后端开
    go是Google开的一种静态强类、编译具有垃圾回收功能的编语言,且是基于Inferno操作系统所开的,支持Linux、macOS、Windows等操作系统。
    go不属于动态语言。go语言是一种静态强类、编译具有垃圾回收功能的编语言。与C++相比,go增加了切片、管道、垃圾回收、接口等特性的语言级支持。
    区别:1、Python是一种基于面向对象编的多范式,命令式和函数式编语言;Go是一种基于范式的过语言。2、Python是动态类语言,Go是静态类语言。
    Go语言是Google公司的。Go语言是Google的Robert Griesemer、Rob Pike及Ken Thompson开的一种静态强类、编译具有垃圾回收功能的编语言。
    go是编译语言,不是解释语言;go是Google的Robert Griesemer,Rob Pike及Ken Thompson开的一种静态强类、编译具有垃圾回收功能的编语言。
    Docker采用的是Go语言编写的,该语言一种静态强类、编译具有垃圾回收功能的编语言,常用于Web序开且具有成熟的Web开框架,如Beego、Gin、Iris等等。
    go是解释语言。Go(又称Golang)是Google开的一种静态强类、编译具有垃圾回收功能的编语言。
    语言go是指Golang语言,是Google开的一种静态强类、编译具有垃圾回收功能的编语言;Go的语法接近C语言,但对于变量的声明有所不同;Go支持垃圾回收功能,Go原生还提供了关联数组
    go是开源语言。Go也称为Golang,是Google开的一种静态强类、编译具有垃圾回收功能的开源编语言,它能让构造简单、可靠且高效的软件变得容易
    go不是动态语言,而是静态类语言。GO是Google开的一种静态强类、编译具有垃圾回收功能的编语言;但是有动态语言的感觉,有很多的包可以使用,写起来的效率很高。
    目前而言这两个语言的定位不一样,go偏向后端,dart偏向跨平台app。在chrome浏览器中嵌入一个Dart虚拟机,可以用Dart语言开Web APP。
    PHP转Go还是转Java,可以根据兴趣和实际情况,来判断转Go还是Java,或是继续做PHP,Go是一种静态强类、编译具有垃圾回收功能的编语言,比Java性能高且语法简洁,如果要转推荐
    go语言不是动态语言。go语言是一种静态强类、编译具有垃圾回收功能的编语言。GO语言的语法接近C语言,但对于变量的声明有所不同。
    go是一种静态强类、编译具有垃圾回收功能的开语言。go语言中每行序结束后不需要撰写分号,大括号不能够换行放置,if判断式和for循环不需要以小括号包含起来。