并发
进程是资源分配的基本单位,切换进程时需要重新读取内存;
比如说:QQ登录时,就会把QQ的相关代码(指令)从磁盘读到内存中,再读入CPU,存入寄存器中,再通过ALU执行指令;如果现在想登录微信,就需要为微信重新分配内存空间,然后把微信的代码拷贝到CPU寄存器中再执行。
而线程是资源调度的基本单位,只需要寄存器保留运行状态即可。
比如说:线程A在ALU中执行了一段指令,但如果此时需要切换线程B,就可以把当前的执行情况先存入CPU缓存中,以便切换回来时能够接着执行。线程切换时不会重新分配空间。
使用并发的原因:同时执行多个事情,提高性能,多线程开发适合多核处理器。
线程环境:
线程存在于进程之中,进程内所有全局资源对于内部每个线程都是可见的。
进程内典型全局资源如下:
1)代码区:这意味着当前进程空间内所有的可见的函数代码,对于每个线程来说,也是可见的
2)静态存储区:全局变量,静态空间
3)动态存储区:堆空间
线程内典型的局部资源:
1)本地栈空间:存放本线程的函数调用栈,函数内部的局部变量等
2)部分寄存器变量:线程下一步要执行代码的指针偏移量
线程的使用
- 一个进程至少有一个线程,在C++中,main()函数是主线程的入口函数。
- 线程不是越多越好,需要看CPU的执行密度,比如:一个线程执行和等待的时间是1:3,那么4个线程比较ok。
- 从C++11开始,C++本身增加了对多线程的支持,意味着可移植性。