我正在参加「掘金·启航计划」
并发的意义就是让 一个程序同时做多件事情,其目的只是为了能让程序同时做另一件事情而已,而不是为了让程序运行的更快(如果是多核处理器,而且任务可以分成相互独立的部分,那么并发确实可以让事情解决的更快)。
golang从语言级别上对并发提供了支持,而且在启动并发的方式上直接添加了语言级的关键字,不必非要按照固定的格式来定义线程函数,也不必因为启动线程的时候只能给线程函数传递一个参数而烦恼。
进程和线程
- 进程: 是程序在操作系统中的执行过程,系统进行资源分配和调度的独立单位
- 线程: 是进程的一个执行实体,是CPU调度和分派的基本单位,他是比进程更小的独立运行的基本单位。
- 一个进程可以创建和撤销多个线程,同一个进程中的多个线程之间可以并发执行。
并发和并行
- 多线程程序在一个核的cpu上运行,就是并发。
- 多线程程序在多个核的cpu上运行,就是并行。
- 并发不是并行,并发主要是由切换时间片来实现“同时”运行,并行则是直接利用多核实现多线程的运行,go可以设置使用核数,以发挥多核计算机的能力。
线程与协程
- 协程:独立的栈空间,共享堆空间,调度由用户自己控制,本质上类似于用户级线程,这些用户级线程的调度也是自己实现的
- 线程:一个线程可以跑多个协程,协程是轻量级的线程。