一、多线程基本概念

并发

进程是资源分配的基本单位,切换进程时需要重新读取内存;

  比如说:QQ登录时,就会把QQ的相关代码(指令)从磁盘读到内存中,再读入CPU,存入寄存器中,再通过ALU执行指令;如果现在想登录微信,就需要为微信重新分配内存空间,然后把微信的代码拷贝到CPU寄存器中再执行。

而线程是资源调度的基本单位,只需要寄存器保留运行状态即可。

  比如说:线程A在ALU中执行了一段指令,但如果此时需要切换线程B,就可以把当前的执行情况先存入CPU缓存中,以便切换回来时能够接着执行。线程切换时不会重新分配空间。

  使用并发的原因:同时执行多个事情,提高性能,多线程开发适合多核处理器。

线程环境:

线程存在于进程之中,进程内所有全局资源对于内部每个线程都是可见的。

进程内典型全局资源如下:

1)代码区:这意味着当前进程空间内所有的可见的函数代码,对于每个线程来说,也是可见的

2)静态存储区:全局变量,静态空间

3)动态存储区:堆空间

线程内典型的局部资源:

1)本地栈空间:存放本线程的函数调用栈,函数内部的局部变量等

2)部分寄存器变量:线程下一步要执行代码的指针偏移量

线程的使用

  1. 一个进程至少有一个线程,在C++中,main()函数是主线程的入口函数。
  2. 线程不是越多越好,需要看CPU的执行密度,比如:一个线程执行和等待的时间是1:3,那么4个线程比较ok。
  3. 从C++11开始,C++本身增加了对多线程的支持,意味着可移植性。

心之所愿,永不相忘
原文地址:https://www.cnblogs.com/zgll/p/15278690.html