并发、进程、线程的基本概念和综述
并发
- 两个或者更多的任务(独立的活动)同时发生(进行):一个程序同时执行多个独立的任务。
- 以往计算机为单核CPU(中央处理器):某一时刻只能执行一个任务,由操作系统调度,每秒钟进行多次“任务切换”,这并不是真正的并发。同时任务切换需要保存与恢复任务上下文,存在时间开销。
- 随着硬件发展,出现了多处理器(多核)计算机,能够实现真正的并行任务处理(硬件并发)。
- 使用并发的原因:可以同时处理多个任务,提高处理性能。
程序
程序是计算机存储系统中的数据文件
- 源代码程序:文本文件,描述程序行为和功能
- 可执行程序:二进制文件,直接加载并执行
进程
- 广义概念:程序关于某个数据集合的一次运行活动
- 侠义概念:程序被加载到内存中执行得到进程
程序和进程的区别
- 程序是硬盘中静态的文件
- 进程是内存中动态的运行实体
进程和线程的区别
一个程序可能对应多个进程
- 一个程序多次运行,每次产生一个进程
一个进程可能包含多个程序
- 一个程序依赖多个其它动态库
在当代操作系统中,资源分配的基本单位是进程;而 CPU 调度执行的基本单位是线程
线程
- 进程内的一个执行单元
- 操作系统中一个可调度实体
- 进程中相对独立的一个控制流序列
深入理解进程和线程
- 进程中可以存在多个线程共享进程资源
- 线程是被调度的执行单元,而进程不是调度单元
- 线程不能脱离进程单独存在,只能依赖于进程运行
- 线程有生命期,有诞生和死亡
- 任意线程都可以常见其它新的线程
- 每个进程都有一个唯一的主线程(进程被创建时,主线程启动执行 main 函数)
并发的实现方法
- 通过多个进程实现并发。
- 在单独的进程中,写代码创建除了主线程之外的其它线程实现并发。
多进程并发
- 例:启动word和网页浏览器同时处理不同任务。
进程之间的通讯方式
- 同一电脑:管道、文件、消息队列、共享内存、socket通讯
- 不同电脑:socket 通讯
多线程并发
- 每个线程可有自己独立的运行路径
- 同一进程中所有线程共享地址空间(共享内存)。全局变量、指针、引用等可以在线程之间传递,通讯开销远远小于进程。
- 线程并不是越多越好,线程需要独立的堆栈空间,同时线程切换时会消耗执行时间。
总结
- 多进程并发和多线程并发可以混合使用,但建议优先考虑多线程技术。
C++11 新标准线程库
经典开发方式
- indow: CreateThread(), _beginthread(),_beginthreadexe()
- linux : pthread_create();
- posix thread (跨平台,需要最基础配置)
C++11及后续
- 语言层面支持多线程,意味着可跨平台,减少开发人员工作两。
**粗体** _斜体_ [链接](http://example.com) `代码` - 列表 > 引用
。你还可以使用@
来通知其他用户。