并发编程简述
简介
该文主要用于介绍Go语言在并发编程中的相关知识总结。
并发的相关概念
并发编程的基本理解是在一个程序中存在多个线程(协程)同时运行。在多线程的运行环境中,就会出现以下不同的问题:
- Race Conditions(竞争条件,当希望多个操作按照一定的顺序来执行,但实际的实现代码无法保证这种顺序。)
- Atomicity(原子操作,可以理解成某些操作无法分割且不能被打断)
- Memory Access Synchronization(内存访问一致性,某些数据在被访问期间,需要保证不被其他线程给修改)
当然在实际的开发过程中,我们会尝试使用各种各样的工具(Mutex,Cond...)来解决上述的问题,但是这些工具使用不当 也会导致各种意外情况:
- Deadlocks(死锁)
- Livelocks(活锁)
- Starvation(饥饿)
其次多线程编程中我们也会有不同的需求:
- 线程之间消息传递
- 错误信息的传播
- 线程操作之间的同步
- 线程的正常销毁
- ...
这些问题是共性问题,后续的文章中我们会逐步分享如何使用Go提供的原生库来解决上述的问题,编写稳定,安全的多线程 程序。