- 1、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。。
- 2、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载。
- 3、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
第4章Go语言并发编程并发编程概述
01基本概念1.并行与并发2.进程、线程与协程
基本概念1.并行与并发计算机程序的执行在底层有并行与并发两种基本方式。(1)并行(Parallel)并行是指在同一时刻有多条指令在多个处理器(核心)上执行。现在的计算机通常都是多核CPU,当一个CPU核心在执行一个进程时,另一个核心可以执行另一个进程,两个进程互不抢占CPU资源,同时运行,这种方式称为“并行”。(2)并发(Concurrent)并发是指同一时刻CPU只能执行一条指令,而多个进程的指令被快速地轮换执行。这样从宏观上看多个进程也是同时在运行,但从微观看,它们并不是“同时”的,只是把时间分成若干片段,交替使用而已。
基本概念2.进程、线程与协程按照程序被执行单元(粒度)的大小,可分为进程、线程和协程三个级别。(1)进程(Process)进程是程序在某个数据集上的一次运行活动,是系统进行资源分配和调度的基本单位,也是操作系统结构的基础。每个进程都有自己独立的内存空间,隔离性好、健壮性高,但是进程是“重量级”的,现代操作系统虽然能够对进程进行调度,可是当进程数大于CPU核心数的时候,并发调度就要进行进程间的切换,这种切换需要保存上下文、恢复堆栈等,操作开销比较大,频繁地切换也很耗时;此外,单进程的程序最多使用一个CPU工作,是无法有效利用机器资源的,由于CPU运行时不可避免要与外部设备通信,这导致单个进程经常会被阻塞,包括I/O等待、缺页中断、等待网络等,尤其对于I/O密集型的程序,外部I/O速度慢和阻塞导致CPU的大部分时间都被白白浪费了。
基本概念(2)线程(Thread)线程有时也被称为“轻量级”进程,它是进程中的一个实体,是被系统独立调度和分派的基本单位。线程拥有自己独立的栈但不拥有系统资源,而是与同属一个进程的其他线程共享该进程所拥有的系统资源。一个标准的线程由线程ID、当前指令指针、寄存器集合和堆栈组成。线程一般也由操作系统调度,在同一个任务的进程中操作系统会启动多个内核线程进行处理,线程切换代价小,并发性能较之单进程程序要好得多,但缺点是线程之间共享内存空间极易造成数据访问混乱,一个线程误操作内存就可能危及整个进程,程序健壮性不高。(3)协程(goroutine)多核时代的程序对并发处理的要求越来越高,但是不能无限制地增加系统线程数,因线程数过多会导致操作系统的调度开销变大,每个线程被分配的运行时间片减少,单个线程速度降低使得仅靠增加线程数已不能进一步提升性能。为了不让线程数无限地膨胀,于是就有了协程的概念。协程是一种用户态的轻量级线程,它本质上其实是一种特殊的函数,但这种函数可以像线程那样在某个地方被“挂起”,并且可以重新在挂起处继续往下运行,每个协程拥有自己的寄存器上下文和栈。
基本概念正如一个进程可以拥有多个线程一样,一个线程也可以拥有多个协程,简单来说,在一个线程内可以有多个这样的特殊函数在运行,进程、线程和协程之间的从属关系如图。
02Go语言的并发模型1.CSP简介2.MPG调度模型
Go语言的并发模型1.CSP简介CSP(CommunicatingSequentialProcesses,通信顺序进程)是由计算机科学家托尼·霍尔(TonyHoare)于1977年提出的一种并发系统消息通信模型。其最基本的思想是:将并发系统抽象为“通道”和“并发实体”两部分,通道用来传递消息,并发实体用于执行。该模型具有如下特点:(1)并发实体是独立的,它们之间没有共享的内存空间。(2)通道与并发实体之间也相互独立,没有从属关系。(3)并发实体之间的数据交换通过通道(而非共享内存)实现,无论在通道中放数据还是从通道中取数据,都会导致并发实体的阻塞,直到通道中的数据被取出或者通道中被放入新的数据,并发实体以这种方式实现同步。(4)消息的发送和接收有严格的时序限制。在这个模型中,发送和接收消息的并发实体并不“知道”对方具体是谁,它们之间是完全解耦的,此外,通道与并发实体也实现了解耦,可以独立地创建通道和存取数据,并在不同的并发实体中传递使用。
Go语言的并发模型2.MPG调度模型(1)M(机器)一个M对应于操作系统的一个内核线程,是操作系统层面调度和执行的实体。M处于整个系统的最底层,不停地被唤醒或创建,然后执行。M是内核空间的线程在用户空间Go进程中的映射,仅负责执行。(2)P(处理器)P可以理解为一种执行用户代码的逻辑(虚拟)处理器,它包含了M执行G所必需的资源,但并不是运行实体,而是一个用于管理的数据结构,负责调度G以控制代码的并行度。一个运行中的M只能绑定一个P,P持有G的队列,M通过P来间接地实现对G的调度。(3)G(协程)G是Go语言运行时对协程的抽象描述,其中存放了并发执行体的元信息,包括入口函数、堆栈、上下文等
您可能关注的文档
最近下载
- 2025中国银行中银国际证券股份有限公司招聘8人笔试模拟试题及答案解析.docx VIP
- 神经介入治疗概述及护理常规.ppt VIP
- 舒伯特第二即兴曲,降E大调 D.899之2 Impromptu No. 2 in E flat major, D. 899, No. 2 Op90 Schubert钢琴谱.pdf VIP
- 深潜器钛合金框架结构装配焊接工艺研究-中国造船工程学会.doc
- 村两委工作细则汇编.doc VIP
- 业财融合背景下项目全周期创新管理研究与实践探索.docx VIP
- 《耳穴压豆疗法》PPT课件.pptx VIP
- 设备故障率分析图表(月度).xls VIP
- XXX村两委班子工作职责(最新整理By阿拉蕾).doc VIP
- 四川省雅安市2023-2024学年八年级下学期期末考试数学试题.docx VIP
文档评论(0)