Go语言进阶一——并发介绍

147 阅读2分钟

我正在参加「掘金·启航计划」

并发的意义就是让 一个程序同时做多件事情,其目的只是为了能让程序同时做另一件事情而已,而不是为了让程序运行的更快(如果是多核处理器,而且任务可以分成相互独立的部分,那么并发确实可以让事情解决的更快)。

golang从语言级别上对并发提供了支持,而且在启动并发的方式上直接添加了语言级的关键字,不必非要按照固定的格式来定义线程函数,也不必因为启动线程的时候只能给线程函数传递一个参数而烦恼。

进程和线程

  • 进程: 是程序在操作系统中的执行过程,系统进行资源分配和调度的独立单位
  • 线程: 是进程的一个执行实体,是CPU调度和分派的基本单位,他是比进程更小的独立运行的基本单位。
  • 一个进程可以创建和撤销多个线程,同一个进程中的多个线程之间可以并发执行。

并发和并行

  • 多线程程序在一个核的cpu上运行,就是并发。
  • 多线程程序在多个核的cpu上运行,就是并行。
  • 并发不是并行,并发主要是由切换时间片来实现“同时”运行,并行则是直接利用多核实现多线程的运行,go可以设置使用核数,以发挥多核计算机的能力。

线程与协程

  • 协程:独立的栈空间,共享堆空间,调度由用户自己控制,本质上类似于用户级线程,这些用户级线程的调度也是自己实现的
  • 线程:一个线程可以跑多个协程,协程是轻量级的线程。