跳转至

并发编程简述

简介

该文主要用于介绍Go语言在并发编程中的相关知识总结。

并发的相关概念

并发编程的基本理解是在一个程序中存在多个线程(协程)同时运行。在多线程的运行环境中,就会出现以下不同的问题:

  • Race Conditions(竞争条件,当希望多个操作按照一定的顺序来执行,但实际的实现代码无法保证这种顺序。)
  • Atomicity(原子操作,可以理解成某些操作无法分割且不能被打断)
  • Memory Access Synchronization(内存访问一致性,某些数据在被访问期间,需要保证不被其他线程给修改)

当然在实际的开发过程中,我们会尝试使用各种各样的工具(Mutex,Cond...)来解决上述的问题,但是这些工具使用不当 也会导致各种意外情况:

  • Deadlocks(死锁)
  • Livelocks(活锁)
  • Starvation(饥饿)

其次多线程编程中我们也会有不同的需求:

  • 线程之间消息传递
  • 错误信息的传播
  • 线程操作之间的同步
  • 线程的正常销毁
  • ...

这些问题是共性问题,后续的文章中我们会逐步分享如何使用Go提供的原生库来解决上述的问题,编写稳定,安全的多线程 程序。