欢迎来到天天文库
浏览记录
ID:50147738
大小:1.36 MB
页数:42页
时间:2020-03-06
《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
此文档下载收益归作者所有