多应用+插件架构,代码干净,二开方便,首家独创一键云编译技术,文档视频完善,免费商用码云13.8K 广告
[TOC] ### **1.1:进程和线程说明** **什么是进程?** 1. **进程就是程序程序在操作系统中的一次执行过程,是系统进行资源分配和调度的基本单位**【如图下】 ![](https://img.kancloud.cn/4d/8b/4d8ba15cf9aee610221a4b49833e9154_935x599.png) <br> <br> **什么是线程?** <br> 2. **线程是进程的一个执行实例,是程序执行的最小单元,它是比进程更小的能独立运行的基本单位**。【一个进程下面可以有多个线程,每一个线程都是独立的,占资源比例相对较小,例如:在App Store下载多个软件,但是后台只运行着一个App Store】 * 一个进程可以创建核销毁多个线程,同一个进程中的多个线程可以并发执行。 * **一个程序至少有一个进程,一个进程至少有一个线程** <br> <br> ### **1.2:进程和线程的关系图:** ![](https://img.kancloud.cn/57/b6/57b633b3bd78b5a38c1de0bdaff3d4c5_1016x720.png) <br> <br> ### **1.3:Golang并发的特点** 多线程程序在**单核**上运行,就是**并发** * [ ] 多个任务作用在一个CPU * [ ] 从微观的角度看,在一个时间点上,其实只有一个任务在执行 <br> <br> ### **1.4:Golang并行的特点** 多线程程序在**多核**上运行,就是**并发** * [ ] 多个任务作用在一个CPU * [ ] 从微观的角度看,在一个时间点上,其实有多个任务在同事执行 * [ ] 这样看来并行的速度快 ![](https://img.kancloud.cn/76/8e/768e1902a795dec931a902f4ef3deeaf_1030x720.png) <br> <br> **并发**:因为是在一个cpu上,比如有10个线程,每个线程执行10毫秒(进行轮询操作),从人的角度看,好像这10个线程都在运行,但是从微观上看,在某一个时间点看,其实只有一个线程在执行,这就是并发。 **并行**:因为是在多个cpu.上(比如有10个cpu),比如有10个线程,每个线程执行10毫秒(各自在不同cpu上执行),从人的角度看,这10个线程都在运行,但是从微观上看,在某一个时间点看,也同时有10个线程在执行,这就是并行 <br> <br> ### **1.5:Go协程和主线程** 1)Go主线程(有程序员直接称为**线程**也可以理解成**进程**):一个Go线程上,可以起多个协程,你可以这样理解,**协程是轻量级的线程\[编译器做优化**] 2)Go协程 的特点 * 有独立的栈空间(一但开启一个协程,他们的数据空间是独立的互补影响) * 共享程序堆空间 * 调度由用户控制(就是线程是有可以有我们自己控制) * 协程是轻量级的线程 **示意图:** ![](https://img.kancloud.cn/e2/78/e278e4e4ae3eaf182a9fbf5d16bd2216_1280x484.png)