Go goroutine的引出及基本介绍
goroutine的引出
- goroutine-看一个需求
- 需求:要求统计 1-9000000000 的数字中,哪些是素数?
- 分析思路:
- 1) 传统的方法,就是使用一个循环,循环的判断各个数是不是素数。[很慢]
- 2) 使用并发或者并行的方式,将统计素数的任务分配给多个 goroutine 去完成,这时就会使用到goroutine[速度提高 4 倍]
goroutine的基本介绍
- 进程和线程介绍
- 进程就是程序程序在操作系统中的一次执行过程,是系统进行资源分配和调度的基本单位
- 线程是进程的一个执行实例,是程序执行的最小单元,它是比进程更小的能独立运行的基本单位。
- 一个进程可以创建和销毁多个线程,同一个进程中的多个线程可以并发执行。
- 一个程序至少有一个进程,一个进程至少有一个线程
- 程序、进程和线程的关系示意图
并发和并行
- 并发和并行
- 多线程程序在单核上运行,就是并发
- 多线程程序在多核上运行,就是并行
- 示意图:
- 并发:因为是在一个cpu上,比如有10个线程,每个线程执行10毫秒(进行轮询操作),从人的角度看,好像这10个线程都在运行,但是从微观上看,在某一个时间点看,其实只有一个线程在执行,这就是并发。
- 并行:因为是在多个cpu上(比如有10个cpu),比如有10个线程,每个线程执行10毫秒(各自在不同cpu上执行),从人的角度看,这10个线程都在运行,但是从微观上看,在某一个时间点看,也同时有10个线程在执行,这就是并行。