61396-Go语言程序设计项目化教程(微课版)5.2 并发.pptx
《61396-Go语言程序设计项目化教程(微课版)5.2 并发.pptx》由会员分享,可在线阅读,更多相关《61396-Go语言程序设计项目化教程(微课版)5.2 并发.pptx(29页珍藏版)》请在淘文阁 - 分享文档赚钱的网站上搜索。
1、并发并发并发简述goroutine调度select多路复用01.02.04.目录channel通信机制03.sync并发控制05.01并发简述进程,线程与协程并发与并行并发模型1并发简述并发简述线程进程协程进程是系统进行资源分配和调度的最小单位,由内核进行调度,拥有独立的内存单元。一个进程中的多个线程之间可以并发执行。线程是CPU调度的最小单位,比进程更小的能独立运行的基本单位,线程分为内核态线程和用户态线程,一个线程上可以运行多个协程。协程是轻量级的线程,独立的栈空间,共享堆空间,调度由用户自己控制。协程无法强制的切换CPU控制权,通常只能进行协作式调度。1并发简述并发简述ABC并发是多线程
2、程序在单核心的cpu上运行,一个时间段内存在多个线程或进程执行,但任何时间点上都只有一个线程或进程执行,多个线程或进程争抢时间片轮流执行,单核处理器只能并发。并发1并发简述并发简述ABC并行是多线程程序在多核心的cpu上运行,一个时间段和时间点存在多个线程或进程执行,利用多核实现多线程的运行,并行需要多核处理器。并行1并发简述并发简述并发模型多进程编程多进程是在操作系统层面进行并发的基本模式,所有的进程由内核管理,相互之间不会影响,但系统开销较大。多协程编程用户态线程,不需要操作系统来进行抢占式调度,且在真正的实现中寄存于线程中,系统开销极小。多线程编程大部分操作系统上都属于系统层面的并发模式
3、,比多进程的开销小很多,但是其开销依旧比较大,且在高并发模式下,效率会有影响。非阻塞/异步IO编程比多线程要复杂,通过事件驱动的方式使用异步IO,尽可能地少用线程,降低开销。02goroutine调度goroutine定义普通函数创建goroutine匿名函数创建goroutinel任何函数加上go就能发送调度器运行;l不需要定义时区分是否异步函数;l调度器在合适的点进行切换;l使用-race检测数据访问冲突;2goroutinegoroutine调度调度调度器度器goroutinegoroutine线程goroutinegoroutine线程goroutine2goroutinegorout
4、ine调度调度示例:go函数名(参数列表)函数名:调用的函数名;参数列表:调用函数需要传入的参数;running()goroutine终止main函数goroutinerunning函数goroutinemain()程序入口go普通函数()main函数终止普通函数创建goroutinefuncrunning()/执行语法funcmain()/并发执行程序gorunning()2goroutinegoroutine调度调度running()goroutine终止main函数goroutine匿名函数goroutinemain()程序入口go匿名函数()main函数终止参数列表:函数体内的参数变量
5、列表。函数体:匿名函数的代码。调用参数列表:启动goroutine时,需要向匿名函数传递的调用参数。匿名函数创建goroutinefuncmain()gofunc(参数列表)函数体(调用参数列表)2goroutinegoroutine调度调度funcrunning(namestring)vartimesintfortimes+fmt.Println(name,times)time.Sleep(time.Second)funcmain()varnamestringname=并发gorunning(name)运行结果为:并发1并发2.main函数中通过go关键字创建running函数gorouti
6、ne并发运行;running函数中通过for实现无限循环,time.Sleep暂停1秒后继续循环,主函数退出时并发程序终止;2goroutinegoroutine调度调度funcmain()gofunc()vartimesintfortimes+fmt.Println(并发,times)time.Sleep(time.Second)()运行结果为:并发1并发2.main函数中通过go关键字创建匿名函数goroutine并发运行;匿名函数中通过for实现无限循环,time.Sleep暂停1秒后继续循环,主函数退出时并发程序终止;03channel通信机制通道的特性通道的声明通道数据接收与发送无缓
7、冲通道有缓冲通道通道超时机制3channelchannel通信机制通信机制Go语言中的通道(channel)是一种特殊的类型。在任何时候,同时只能有一个goroutine访问通道进行发送和获取数据。goroutine间通过通道就可以通信。通道像一个传送带或者队列,总是遵循先入先出(FirstInFirstOut)的规则,保证收发数据的顺序。通道(channel)var通道变量通道类型注:chan类型的空值是nil,声明后需要配合make后才能使用1、声明通道类型3channelchannel通信机制通信机制通道实例:=make(数据类型)2、创建通道var通道实例-chan数据类型3、声明读取
8、单向通道var通道实例chan-数据类型4、声明写入单向通道readch:=make(chanint)writech:=make(chanint)readch:=make(chanint)var读取变量-chanint=readchwritech:=make(chanint)var写入变量chan-int=writech3channelchannel通信机制通信机制示例:通道变量-值函数名:通过make创建好的通道实例参数列表:可以是变量、常量、表达式或者函数返回值等,类型必须与ch通道的元素类型一致通道发送数据packagemainfuncmain()ch:=make(chaninterfa
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 61396-Go语言程序设计项目化教程微课版5.2 并发 61396 Go 语言程序设计 项目 教程 微课版 5.2
限制150内