goroutine

goroutine
1. 进程、线程、协程1.1 进程进程是程序一次动态执行的过程是程序运行的基本单位。每个进程都有自己的独立内存空间不同进程通过进程间通信来通信。进程占据独立的内存所以上下文进程间的切换开销栈、寄存器、页表、文件句柄等比较大但相对比较稳定安全。1.2 线程线程又叫做轻量级进程是 CPU 调度的最小单位。线程从属于进程是程序的实际执行者。一个进程至少包含一个主线程也可以有更多的子线程。多个线程共享所属进程的资源同时线程也拥有自己的专属资源。线程间通信主要通过共享内存上下文切换很快资源开销较少但相比进程不够稳定容易丢失数据。1.3 协程协程是一种用户态的轻量级线程协程的调度完全由用户控制。一个线程可以拥有多个协程协程不是被操作系统内核所管理而完全是由程序所控制。2. 并发和并行2.1 并发Concurrency所谓并发就是通过一种算法将 CPU 资源合理地分配给多个任务当一个任务执行 I/O 操作时CPU 可以转而执行其它的任务等到 I/O 操作完成以后或者新的任务遇到 I/O 操作时CPU 再回到原来的任务继续执行。虽然 CPU 在同一时刻只能执行一个任务但是通过将 CPU 的使用权在恰当的时机分配给不同的任务使得多个任务在视觉上看起来是一起执行的。CPU 的执行速度极快多任务切换的时间也极短用户根本感受不到所以并发执行看起来才跟真的一样。2.2 并行Parallelism并发是针对单核 CPU 提出的而并行则是针对多核 CPU 提出的。和单核 CPU 不同多核 CPU 真正实现了「同时执行多个任务」。2.3 并行 并发3. Go 协程3.1 特点独立的栈空间所谓栈空间就是协程独有的保存其运行状态和局部自动变量的共享程序堆空间大家共有的空间用完需要及时的还给计算机调度由用户控制用户可以任意控制协程间的切换轻量级的线程属于线程不占用太多的 CPU但可以充分利用 CPU完成相应功能3.2 运行机制