- 进程是程序在操作系统中的一次 执行过程 , 系统 进行 资源分配 和 调度 的一个 独立单位 。
- 线程是进程的一个 执行实体 ,是 CPU 调度 和 分派 的 基本单位 ,它是比进程 更小 的能 独立运行 的 基本单位 。
- 一个进程可以 创建和撤销 多个线程,同一个进程中的多个线程之间可以 并发 执行。
- 多线程 程序在 单核心 的 cpu 上运行,称为 并发 ;
- 多线程 程序在 多核心 的 cpu 上运行,称为 并行 。
- 并发与并行并不相同,并发主要由 切换时间片 来实现(准) “同时”运行 ,并行则是直接 利用多核 实现 多线程的运行 ,Go程序可以 设置使用核心数 ,以发挥多核计算机的能力。
- 协程: 独立 的 栈空间 , 共享堆空间 ,调度由 用户 自己 控制 ,本质上有点类似于 用户级线程 ,这些用户级线程的调度也是自己实现的。
- 线程: 一个线程 上可以跑 多个协程 , 协程是轻量级的线程 。
程序员只需要定义很多个任务,让系统去把这些任务分配到CPU上实现并发执行
- 对一个关闭的通道再发送值就会导致panic。
- 对一个关闭的通道进行接收 会一直获取值 直到通道为空。
-
嗯?
- 对一个关闭的并且没有值的通道执行接收操作会得到对应类型的 零值 。
- 关闭一个已经关闭的通道会导致panic。
i, ok := <-ch1 // 通道关闭后再取值ok=false
for i := range ch2 { // 通道关闭后会退出for range循环