本文主要介绍并行编程,什么是并行的,并发,序列的。如何实施并发编程和实施原则,即使用Goroutine。
如何理解多个任务?实际上,我们的操作系统可以同时执行多个任务。例如,在听音乐时,您在谈论QQ时刷了微博,同时使用Markdown来编写家庭作业。这是多个任务。至少有4个任务正在同一时间运行。仍然有许多任务同时在后台安静地运行,但是接口上没有显示。
CPU的速度太快了,因此您觉得它们同时运行
GO是一种平行的语言,而不是平行语言。在讨论如何执行GO中的并发性之前,我们必须首先了解什么是并发,以及与并行性不同。()
并发并发是同时处理许多事情的能力。
例如,假设一个人在早上跑步。在早上的跑步,他的鞋带松动。现在,这个人停止跑步,鞋带,然后开始跑步。这是一个典型的复杂示例。该人可以处理跑步和鞋带一段时间的同一时间。这是一个可以同时处理许多事情的人。
什么是并行性,IT复合材料有什么区别?同时做很多事情。这听起来可能类似于并发,但实际上是不同的。
让我们最好以相同的慢跑示例理解它。在这种情况下,我们假设这个人正在慢跑并使用手机听音乐。在这种情况下,一个在慢跑时听音乐的人,也就是说,他正在做一个同时很多事情。这是如此被称为平行。
Pailatinity and Parallel -a技术的观点。支持我们正在编写Web浏览器。Web浏览器具有各种组件。其中两个是网页演示文稿的下载器,并从Internet下载文件。支持我们在此中构建浏览器代码方式以便可以独立执行每个组件。此浏览器在单个核处理器中运行时,处理器将在浏览器的两个组件之间切换。它可以在一段时间内下载文件,然后可以切换到该文件呈现用户请求的网页的html。这是SO所符合的并发性。并发过程从不同的时间点开始,其执行周期重叠。在这种情况下,下载和呈现从不同的时间点,他们的执行重叠。
假设在多核处理器上运行相同的浏览器。在这种情况下,文件下载组件和HTML表示组件可能会同时在不同的内核中运行。这是So -so -call parallealist。
副层并不总是会导致更快的执行时间。这是因为运行的组件可能需要相互通信。例如,在我们的浏览器中,当文件下载时,应将其传递给用户,例如使用POP-up窗口。此通信发生在负责下载的组件和负责用户界面的组件之间。此交流开销在并发系统中非常低。当组件在多个内核中并行运行时,此通信开销很高。因此,时间表并不总是会导致更快的执行时间!
流程(过程),线程(线程),公司(Coroutine,也称为轻量级线程)
过程
该过程是数据集中的动态执行过程,可以简单地理解为“执行过程”。它是CPU资源分配和调度的分配和调度的独立单位。该过程通常由三个部分组成:程序,数据集和过程控制块。我们编写的过程用于描述什么功能以及如何完成该过程;数据集是程序在执行过程中所需的资源;它可用于控制和管理过程,这是系统感知过程的唯一迹象。该过程的限制是创建,取消和切换的开销相对较大。
线
线程是该过程后开发的概念。该线程也称为轻量级过程。它是基本的CPU执行单元,也是程序执行过程中最小的单元。它由线程ID,程序计数器,寄存器集和堆栈组成。一个过程可以包含多个线程。线程的优点是减少程序同时执行的费用,并提高操作系统的并发性能。缺点是该线程没有自己的系统资源,只有运行时才具有基本资源。如果该过程与研讨会进行了比较,则该过程拥有的系统资源,那么线程就像讲习班中的工人一样。,对于某些独家资源锁定机制,不当处理可能会产生“死锁”。
Coroutine
理事会是一个轻巧的线程,也称为Micro -thread,英语名称Coroutine,Coroutine的调度完全由用户控制。People通常了解公司和子例程(函数)。 -sub -program -program call始终是一个入口,返回处于返回时间。退出后,您完成了子例程的执行。
与传统系统 - 级别的线程和流程相比,Coroutine的最大优势在于其“轻量级”,它可以轻松地创建数百万美元而不会导致系统资源,而线程和过程通常不能超过10,000多达10,000 ,, 10,000 essencethis的原因。也称为轻质线程。
与多线程相比,其优点反映在:Coroutine的执行效率非常高。因为子例程开关不是线程开关,而是由程序本身控制。因此,没有线程开因头顶开关。与多线程相比,线程越多,Coroutine的性能优势就越明显。
GO语言的实现基于Coroutine,Goroutine
Goroutine用于同时实现。
Goroutine是GO语言独有的名词。从过程过程,线程,企业coroutine不同,因为GO语言的创建者与它们不同,因此他们特别创建了Goroutine。
Goroutine是与其他函数或方法同时运行的函数或方法。可以将其视为轻量级线程。与线程相关联,创建Goroutine的成本非常小。它是一个代码和功能条目。并且一个分布在堆上的堆栈(初始大小为4K,它将在程序执行时自动删除)。因此,它非常便宜,并且GO应用程序可以运行数千个Goroutines。
Goroutines在线程上的优势。
封装主函数的Goroutine是主要goroutine。
Goroutine勋爵所做的不像执行主要功能那么简单。它必须做的第一件事是设置每个Goroutine可以应用的堆栈空间的最大尺寸。此32-位计算机系统中的最大尺寸为250MB,并且这个尺寸为64位计算机系统中的1GB。如果Goroutine堆栈空间的大小大于此限制,那么该系统将在堆栈溢出的运行时引起恐慌。SubSub,此GO程序的操作也是终止。
从那时起,戈鲁托勋爵将进行一系列初始化工作,所涉及的工作大致如下:
在函数或方法调用之前添加关键字GO,您将同时运行新的Goroutine。
示例代码:
运行结果:可能输出“主函数”。
goroutine怎么样?我们需要了解Goroutine的规则
修改上述代码:
操作结果:
在上面的程序中,我们称之为“时代”软件包的睡眠方法,该方法将在执行过程中睡觉。在这种情况下,Main的Goroutine用于睡觉1秒钟。Main Goroutine被终止。该程序首先打印Hello World Goroutine,等待1秒钟,然后打印主功能。
示例代码:
操作结果:
时间表分析: