一、并发,进程,线程的基本概念
- 并发:两个或者更多任务(独立的活动)同时发生(进行):一个程序同时执行多个独立的任务(使用并发的原因:主要就是同时可以干多个事,提高性能)
- 进程:就是运行起来的可执行程序
- 线程:代码执行的另一条通路,每个进程都有一个主线程,并且主线程唯一(主线程和进程同在),线程并不是越多越好,每个线程都需要一个独立的空间,线程之间的切换要保存很多的中间状态
二、并发的两种方式
- 多进程并发:进程间通讯(同一台电脑上:管道,文件,消息队列,共享内存;不在同一台电脑上:socket通讯)
- 多线程并发:单个进程中,创建了多个线程(感觉像轻量级的进程),每个线程都有自己独立运行的路径,但是一个进程中的所有线程共享地址空间(共享内存),所以 全局变量,指针,引用都可以在线程之间传递,导致多线程开销远远小于多进程
多进程并发和多线程并发虽然可以混合使用,但建议优先考虑多线程技术
三、线程和进程优缺点比较
1. 优点
- 线程启动速度更快,线程被认为是更轻量级
- 线程的开销更低,通过共享内存的方式进行通讯比进程间通讯速度更快
2. 缺点
- 使用起来有一定难度,小心处理数据的一致性
- 不能在分布式系统下运行,进程则可以
四、C++11新标准线程库
- C++语言本身增加对多线程的支持,意味着可移植性(跨平台),大大减少程序员开发量;老式创建线程不支持跨平台