首页
学习
活动
专区
工具
TVP
发布
精选内容/技术社群/优惠产品,尽在小程序
立即前往

串行与并发、并发与并行、进程与线程、多进程与多线程、协程、Goroutine概念理解之一

01 串行与并发

计算机的CPU从单内核(core)向多内核发展,而我们的程序都是串行的,串行程序serialprogramming在很多场景下无法使计算机硬件的能力得发挥出适应我们要求的需要。

并发技术,就是可以在同一时间同时执行多条任务的技术。并发程序的最大优点可以充分利用CPU核心的优势,提高程序的执行效率,充分利用CPU与其他硬件设备固有的异步性。

02并行(parallellism)与并发(concurrency)

并行是指两个或者多个事件在同一时刻发生。而并发是指两个或多个事件在同一时间间隔发生。

并行是在不同实体上的多个事件。并发是在同一实体上的多个事件。

并行是在多台处理器上同时处理多个任务。并发是在一台处理器上“同时”处理多个任务充分的利用处理器的每一个核,并发编程的目标是达到最高的处理性能。

03线程(thead)与进程(process)

线程thead是在操作系统层面执行体对应的概念。操作系统自己掌管的是进程process,是资源的分配和调度的一个独立单元。

进程内的线程是thread,是CPU调度的基本单元。同一个进程中可以包括多个线程,并且线程共享整个进程的资源(寄存器、堆栈、上下文)。

一个进程至少包括一个线程,线程中执行时一般都要进行同步和互斥,因为他们共享同一进程的所有资源。

04 多进程与多线程

多进程是在操作系统层面进行并发的基本模式。多线程在大部分操作系统上都属于系统层面的并发模式,也是我们使用最多的最有效的一种模式。

05协程(Coroutine)

也叫轻量级线程,本质上是一种用户态线程,不需要操作系统来进行抢占式调度,且在真正的实现中寄存于线程中,因此,系统开销极小,可以有效提高线程的任务并发性,而避免多线程的缺点。

传统的系统级线程和进程相比,协程的最大优势在于其“轻量级”。可以轻松创建上百万个而不会导致系统资源衰竭,而线程和进程通常最多也不能超过1万个。这也是协程也叫轻量级线程的原因。

协程不是进程或线程,其执行过程更类似不带返回值的函数调用。

一个程序可以包含多个协程,可以对比与一个进程包含多个线程,多个线程相对独立,有自己的上下文,切换受系统控制;而协程也相对独立,有自己的上下文,但是其切换由自己控制,由当前协程切换到其他协程由当前协程来控制。

06 Goroutine

Goroutine是Go语言中的轻量级线程实现,由Go运行时runtime管理。在一个函数调用前加上go关键字,这次调用就会在一个新的goroutine中并发执行。当被调用的函数返回时,这个goroutine也自动结束了。需要注意的是,如果这个函数有返回值,那么这个返回值会被丢弃。

别光说不练,下面的例子请看:

例:GO语言的并发实例

微信关注NZ_9668,分享成果,随喜正能量。

  • 发表于:
  • 原文链接http://kuaibao.qq.com/s/20180316G1UN8H00?refer=cp_1026
  • 腾讯「腾讯云开发者社区」是腾讯内容开放平台帐号(企鹅号)传播渠道之一,根据《腾讯内容开放平台服务协议》转载发布内容。
  • 如有侵权,请联系 cloudcommunity@tencent.com 删除。

扫码

添加站长 进交流群

领取专属 10元无门槛券

私享最新 技术干货

扫码加入开发者社群
领券