Go语言市如何保证高并发的?

1、前戏

什么是CSP?

当进行和Go语言有关的讨论的时候,你会经常听到人们抛出CSP这个缩写。在某些环境下CSP经常被赞美成Go语言成功的原因已经并发编程的“万能钥匙”。

那么,CSP到底是什么?为什么让人们如此兴奋呢?

CSP即“Communicating Sequential Processes”(通信顺序进程),既是一个技术名词,也是介绍这种技术的论文的名字。在论文中Hoare认为输入与输出是两个被忽略的编程原语,尤其是在并发代码中。论文中的核心思想就是一个进程的输出应该是另一个进程的输入。

Go语言的并发原理一开始就建立在CSP之上,因此很容易阅读、编写和推理。

通常来讲,一种语言将他们的抽象链结束在系统线程和内存访问同步的层级。Go语言采用不同的路线,并使用gorountine和channel来替代这些概念。这些抽象能帮助我们做什么呢?gorountine把我们从必须按照并行的方式思考解放出来,作为替代,他与允许我们按照更为自然的的等级对问题进行建模。

2、为什么用Go语言编写并发程序很容易

在Go语言中,你可以直接将问题的描述编写成代码。

gorountine是很轻量级的,通常情况下,我们并不需要为创建新的gorountine的代价而担心。Go语言在运行时,自动将gorountine映射到系统的线程上,并为我们管理他们之间的调度。

在使用Go语言的时候我们会在更细的颗粒度级别编写并发代码。例如,如果要实现一个网络服务器,用Java编程你会不自然的将链接绑定到一个线程池。而Go语言不同,你可以为每一个用户请求创建一个独立的gorountine,而不是将链接绑定到一个线程池。

3、语言的并发哲学

CSP一直是GO语言设计的重要组成部分。然而,Go语言还支持通过内存访问同步和遵循该技术的原语来编写并发代码的传统方式。sync与其它包中的结构体与方法可以让你执行锁,创建资源池来取代gorountine等。

但是,使用GO语言编写并发程序,还是鼓励使用CSP。Go语言的一个座右铭是,“使用通信来共享内存,而不是通过共享内存来通信”。

Go语言的并发哲学可以这样总结:追求简洁,尽量使用channel,并且认为gorountine的使用是没有成本的。

4、Go语言的并发组件

a、什么是gorountine?

package miller

import "fmt"

func main()  {
	//简单理解,goroutine就是一个并发的函数(记住,不一定是并行的),与其它
	//代码一起运行。你可以简单地在一个函数之前添加go关键字来触发:
	go sayHello()
	//继续执行自己的逻辑
}

func sayHello()  {
	fmt.Println("hello my dear!")
}

 

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值