概念
进程和线程
是什么? | 比喻 | 关系 | |
---|---|---|---|
进程 | 一次执行过程 进程就是程序程序在操作系统中的一 次执行过程,是系统进行资源分配和调度的基本单位 | 迅雷下载文件夹,是一个进程,文件夹内有多个文件同时下载,这些叫线程 线程⊆进程 |
一个进程可以创建核销毁多个线程, 同一个进程中的多个线程可以并发执行。 |
线程 | 一个执行实例 线程是进程的一个执行实例,是程序 执行的最小单元,它是比进程更小的能独立运行的基本单位. | 一个程序至少有一个进程,一个进程至少有一个线程 |
局部解释:
- 任务管理器内可看到进程
- 程序、进程、线程
- 程序与进程的关系
并行和并发
是什么 | 比喻 | 需要什么支持? | |
---|---|---|---|
并发 | 多线程程序在单核上运行,这就是并发 | 并发是两个队列交替使用一台咖啡机 |
软件 |
并行 | 多线程程序在多核上运行,就是并行 | 并行是两个队列同时使用两台咖啡机 |
硬件—多核处理器 |
解释:
- 并发具体解释
因为是在一个cpu上,比如有10个线程,每个线程执行10毫秒(进行轮询操作), 从人的角度看,好像这10个线程都在运行,但是从微观上看,在某一个时间点看,其实只有一个线程在执行,这就是并发。 - 并行
- 一般而言,并行速度高于并发
go语言的并发
有人把 Go 比作 21 世纪的 C 语言,第一是因为 Go 语言设计简单,第二,21 世纪最重要的就是并行程序设计,而 Go 从语言层面就支持了并发。同时,并发程序的内存管理有时候是非常复杂的,而 Go 语言提供了自动垃圾回收机制。 Go 语言为并发编程而内置的上层 API 基于 CSP(communicating sequential processes, 顺序通信进程)模型。这就意味着显式锁都是可以避免的,因为 Go 语言通过相册安全的通道发送和接受数据以实现同步,这大大地简化了并发程序的编写。 一般情况下,一个普通的桌面计算机跑十几二十个线程就有点负载过大了,但是同样这台机器却可以轻松地让成百上千甚至过万个 goroutine 进行资源竞争Go协程和主线程
- 概念理解
- 在go里,进程与线程➡主线程+协程
- 主线程=线程=进程
(有的程序员直接这么讲)(俺很迷惑) - 可以这么理解协程:
协程是轻量级的线程(编译器做的优化)
- Go协程的特点(面试考点)
- 有独立的栈空间
- 共享程序堆空间
- 调度由用户控制
- 协程是轻量级别的线程