Go并发编程-郝林.pdf

Go并发编程-郝林.pdf

ID:50147738

大小:1.36 MB

页数:42页

时间:2020-03-06

Go并发编程-郝林.pdf_第1页
Go并发编程-郝林.pdf_第2页
Go并发编程-郝林.pdf_第3页
Go并发编程-郝林.pdf_第4页
Go并发编程-郝林.pdf_第5页
资源描述:

《Go并发编程-郝林.pdf》由会员上传分享,免费在线阅读,更多相关内容在工程资料-天天文库

1、Go并发编程 Golang: Letgopher run faster v1.0.0 15/1/13 分享者:郝林1 关于我 郝林,年龄33-,码龄9年+,Go语言非脑残粉(@特价萝卜)Java软件工程师Clojure/Python程序员Linux爱好者NBA观众15/1/13 宜信-微佳2 关于《Go并发编程实战》2013年7月受图灵公司之邀开始撰写书稿,2014年7月提交初稿,2014年11月出版。历经16个月。分享Go语言编程知识探究Go语言并发编程原理为Go语言中文社区做一点贡献找一个深入理解Go语言的理由http://www.ituring.com.

2、cn/book/152515/1/13 宜信-微佳3 目录 1•Go语言与并发编程 2•Goroutine与go语句 3•Channel4•并发编程原理一窥 5•一些控制参数 6•推荐阅读列表15/1/13 宜信-微佳 4 Go语言是怎样的?开源软件,社区活跃、迭代快速通用、系统级、跨平台静态类型、编译型,脚本化的语法支持多种编程范式(函数式+面向对象)提供了强大、易用的工具,涵盖软件的全生命周期原生的并发编程支持在大大提高开发效率的同时拥有极高的运行效率 15/1/13 宜信-微佳5 Go语言的哲学 崇尚简约约定大于配置(但配置也不可或缺)在编码规范上严

3、谨,在软件设计上宽松以通讯的方式共享内存,而不是将共享内存作为通讯手段软件工程至上!15/1/13 宜信-微佳 6 Go语言与并发编程(1)Goroutine是Go语言用于对并发编程提供原生支持的利器,也是其并发编程模型的核心概念之一。Go语言的开发者们之所以专门创建了这样的一个名词,是因为他们认为现存的进程(Process)、线程(Thread)、协程(Coroutine)等概念都向应用程序员们传达了错误的信号。为了与它们有所区别,Goroutine这个词得以诞生。15/1/13 宜信-微佳7 Go语言与并发编程(2)多进程编程:管道(Pipe)信号(Signal)

4、消息队列(︎︎︎︎︎MessageQueue)︎信号灯(Semaphore)共享内存︎︎︎区︎(SharedMemory)套接字(Socket)15/1/13 宜信-微佳8 Go语言与并发编程(3)多线程编程:共享内存︎︎︎区︎(SharedMemory)互斥量(Mutex)条件变量(Conditions)原子操作(Atomicoperation)可重入函数(Reentrantfunction)15/1/13 宜信-微佳9 Go语言与并发编程(4)Go语言特有的并发编程方式:Goroutine&Channel 15/1/13 宜信-微佳10 Goroutin

5、e与go语句(1)Goroutine是怎样的?轻量级线程?绿色线程?协程?超级协程✗?笼统地讲,Goroutine基于两级线程模型,可以被视为“用户级线程”。但它背后的支撑体系比之更加复杂和高效。15/1/13 宜信-微佳11 Goroutine与go语句(2)与Goroutine有关的几个数字:一个Goroutine栈的初始尺寸:2KB(相比之下,一个线程栈默认需要8MB)一个Goroutine栈的最大尺寸:在32位系统下为:250MB在64位系统下为:1GB默认情况下,N(几十上百万)个Goroutine最多可以在10000个内核线程上调度运行。15/1/13 

6、宜信-微佳12 Goroutine与go语句(3)怎样创建或启用一个Goroutine?go println("Go! Goroutine!")  go func() { println("Go! Goroutine!")  }()  15/1/13 宜信-微佳13 Goroutine与go语句(4)有一点需要特别注意:names := []string{"Eric", "Harry", "Robert", "Jim", "Mark"}  for _, name := range names {     go func() { fmt.Printf("Hello, %s.

7、", name)     }()  } ✗输出:Hello,Mark.Hello,Mark.Hello,Mark.Hello,Mark.Hello,Mark.15/1/13 宜信-微佳14 Goroutine与go语句(5)正确的做法是:names := []string{"Eric", "Harry", "Robert", "Jim", "Mark"}  for _, name := range names {     go func(who string)          { fmt.Printf

当前文档最多预览五页,下载文档查看全文

此文档下载收益归作者所有

当前文档最多预览五页,下载文档查看全文
温馨提示:
1. 部分包含数学公式或PPT动画的文件,查看预览时可能会显示错乱或异常,文件下载后无此问题,请放心下载。
2. 本文档由用户上传,版权归属用户,天天文库负责整理代发布。如果您对本文档版权有争议请及时联系客服。
3. 下载前请仔细阅读文档内容,确认文档内容符合您的需求后进行下载,若出现内容与标题不符可向本站投诉处理。
4. 下载文档时可能由于网络波动等原因无法下载或下载错误,付费完成后未能成功下载的用户请联系客服处理。