并发 进程和线程的基本概念
-
- 并发:
两个或者多个任务(独立任务)同时发生(进行);一个程序同时执行多个任务;
在以往计算机中,单核CPU(中央处理器):在某个时刻只能同时执行一个任务,由操作系统进行调度,进行所谓的‘任务切换’,这是一种并发的假象(不是真正的并发),执行切换(上下文切换),是需要有时间开销的,比如操作系统要保存你恢复时的各种状态、执行进度等,都需要时间开销。多核CPU,能够实现真正的并发(硬件并发)
并发的目的:同时可以进行多个任务,提高性能。
- 并发:
- 2.可执行程序
磁盘上的文件, windows上文件名为.exe文件,可执行程序是可以运行的, linux系统下下,ls -la rwx(x执行权限) - 3.进程
简单来说,就是可执行文件运行起来,就叫做创建了一个进程,或者说进程就是运行起来的可执行程序。 - 4.线程
每个进程(运行起来的可执行程序),都有一个主线程,主线程是唯一的,也就是进程中只有一个主线程;
当执行可执行程序后,产生一个进程后,主线程就随着进程默默启动了;
VS中,如果ctrl+F5运行一个程序的时候,其实就是进程的主线程来执行(调用)main函数的代码。
进程和主线程生命周期一样的。
线程:用来执行代码的,可以理解成执行代码的一条通路。
除了主线程之外,我们还可以创建其他线程,但是走的不同通路。
每创建一个线程,就可以做执行一条代码路径,多线程。但是线程并不是越多越好,每个线程都有独立的堆栈空间,线程之间切换会有时间和内存消耗的。
多线程进程程序可以同时执行多个任务,所以运行效率高。
并发的实现方法
- 多进程实现并发。
例如,启动一个浏览器是一个进程,在启动一个VS就是另外一个进程。
账号服务器,游戏逻辑服务器。服务器进程之间的通信。
进程间通信:(同一电脑上)管道、文件、消息队列、共享内存;
(不同电脑上)socket通信技术。 - 多线程实现并发,即在单个进程中,实现除了主线程之外的其他线程。
线程:轻量级的进程,每个线程有自己独立的代码路径,但是同一进程中的多个线程共享地址空间(共享内存),全局变量、指针、引用等都可以在线程之间共享,因此多线程开销远小于多进程。
共享内存代码的问题:数据一致性问题。 - 多进程和多线程技术可以混合使用,但是优先考虑多线程技术。
线程和进程对比
- 优点
线程启动速度更快,更轻量级
系统开销资源更少,执行速度更快,例如共享内存这种通讯技术比其他通讯速度都快。
*缺点
使用有一定难度,注意处理数据一致性问题。
C++11新标准线程库
windows:CreateTheard(), _beginthread(), _beginthreadexe()创建线程
linux:pthread_create()创建线程
POSIX: thread(pthread)跨平台库
- C++11新标准,C++本身对多线程支持,意味着可移植性,跨平台