并发、过程、线程的基本概念和综述
并发
- 两个或者更多的工作(独立的流动)同时产生(进行):一个程序同时执行多个独立的工作。
- 以往计算机为单核 CPU(中央处理器):某一时刻只能执行一个工作,由操作系统调度,每秒钟进行屡次“工作切换”,这并不是真正的并发。同时工作切换须要保留与复原工作上下文,存在工夫开销。
- 随着硬件倒退,呈现了多处理器(多核)计算机,可能实现真正的并行任务解决(硬件并发)。
- 应用并发的起因:能够同时解决多个工作,进步解决性能。
可执行程序
-
磁盘上的一个文件:
- window : .exe
- linux:具备可执行属性的文件(-x)
过程
- 运行一个可执行程序失去过程。过程是操作系统资源分配的根本单位。
线程
- 每个过程都有一个惟一的主线程。
- 过程被创立时,主线程启动执行 main 函数。
- 线程中能够持续创立其它非主线程。
- 线程是操作系统调度的根本单位。
学习心得
- 开发多线程程序是商用的必须需要。
- 线程开发有肯定难度。
- C++ 线程会设计到很多新的概念。
- 网络通讯、网络服务中多线程是肯定会被用到的。
并发的实现办法
- 通过多个过程实现并发。
- 在独自的过程中,写代码创立除了主线程之外的其它线程实现并发。
多过程并发
- 例:启动 word 和网页浏览器同时解决不同工作。
-
过程之间的通信形式
- 同一电脑:管道、文件、音讯队列、共享内存、socket 通信
- 不同电脑:socket 通信
多线程并发
- 每个线程可有本人独立的运行门路
- 同一过程中所有线程共享地址空间(共享内存)。全局变量、指针、援用等能够在线程之间传递,通信开销远远小于过程。
- 线程并不是越多越好,线程须要独立的堆栈空间,同时线程切换时会耗费执行工夫。
总结
- 多过程并发和多线程并发能够混合应用,但倡议优先思考多线程技术。
C++11 新规范线程库
-
经典开发方式
- indow: CreateThread(), _beginthread(),_beginthreadexe()
- linux:pthread_create();
- posix thread (跨平台,须要最根底配置)
-
C++11 及后续
- 语言层面反对多线程,意味着可跨平台,缩小开发人员工作两。