一.goroutine-基本介绍
进程和线程说明
1.进程就是程序在操作系统中的一次执行过程,是系统进行资源分配和调度的基本单位
2.线程是进程的一个执行实例,是程序执行的最小单元,它是比进程更小的能独立运行的基本单位。
3.一个进程可以创建和销毁多个线程,同一个进程中的多个线程可以并发执行。
4.一个程序至少有一个进程,一个进程至少有一个线程
并发和并行
1.多线程程序在单核上运行,就是并发
2.多线线程序在多核上运行,就是并行
并发:因为是在一个CPU上,比如有10个线程,每个线程执行10毫秒(进行轮询操作),从人的角度看,好像这10个线程都在执行,但是从微观上看,在某一个时间点看,其实只有一个线程在执行,这就是并发。
并行:因为是在多个CPU上(比如有10个CPU),比如有10个线程,每个线程执行10毫秒(各自在不同CPU上执行),从人的角度看,好像这10个线程都在执行,但是从微观上看,在某一个时间点看,也同时有10个线程在执行,这就是并行。
Go协程和Go主线程
1.Go主线程(有程序员直接称为线程/也可以理解为进程):在一个Go线程上,可以起多个协程,协程就是轻量级的线程
2.Go协程的特点
有独立的栈空间
共享程序堆空间
调度由用户控制
协程是轻量级的线程
案例说明:
快速入门小结:
1.主线程是一个物理线程,直接作用在CPU上的。是重量级的,非常耗费CPU资源。
2.协程是从主线程开启的,是轻量级的线程,是逻辑态。对资源消耗相对较小
3.golang的协程机制是重要的特点,可以轻松的开启上万个协程。其他编程语言的并发机制是一般基于线程的。开启过多的线程,资源耗费大,这里就突显Golang在并发上的优势了
设置Golang运行的CPU数
介绍:为了充分利用多CPU的优势,在golang程序中,设置运行的CPU数目