线程与进程,多线程,多进程,线程并发,线程并行

1、线程、进程概念:

     进程:是程序的一次运行活动,是系统资源分配和调度的一个独立单位,有独立的地址空间和系统资源。

     线程:“轻量级进程”,是进程的一个实体,是CPU调度的基本单位。多个线程共享同一个进程的资源。

2、引入线程的好处

(1)线程占用资源要比进程少的多
(2)建立一个新的线程花费的代价小
(3)切换线程方便
(4)提升并发性

3、多线程

  多线程举例:好比用浏览器,同时进行浏览网页、播放视频、下载资源、听音乐等操做

多线程缺点: 
  1. 多线程比多进程成本低,不过性能也更低
  2. 一个线程的崩溃可能影响到整个程序的稳定
  3. 线程多了以后,线程自己的调度也麻烦,须要消耗较多的CPU
  4. 没法直接获取系统的资源,整体可以达到的性能上限有限制
  5. 线程之间的同步和加锁控制比较麻烦

4、 多进程

  多进程举例:好比同时运行QQ、微信、截图工具、视频播放器等

多进程优势:
  1. 每一个进程互相独立,子进程崩溃不影响主程序的稳定性
  2. 经过增长CPU,就能够容易扩充性能
  3. 进程能直接获取系统的资源,整体可以达到的性能上限很是大

5、同一进程的线程共享哪些资源?

     a. 因为堆是在进程空间中开辟出来的,因此它是理所固然地被共享的;所以new出来的都是共享的(16位平台上分全局堆和局部堆,局部堆是独享的)
     b. 全局变量 它是与具体某一函数无关的,因此也与特定线程无关;所以也是共享的
     c. 局部静态变量 虽然对于局部变量来讲,它在代码中是“放”在某一函数中的,可是其存放位置和全局变量同样,存于堆中开辟的.bss和.data段,是共享的
     d. 文件等公用资源 这个是共享的,使用这些公共资源的线程必须同步。Win32 提供了几种同步资源的方式,包括信号、临界区、事件和互斥体。

6、线程独享的资源?

     a. 栈 栈是独享的
     b. 寄存器 这个可能会误解,由于电脑的寄存器是物理的,每一个线程去取值难道不同吗?其实线程里存放的是副本,包括程序计数器PC
     c. 线程ID

7、并发

     并发是把CPU运行时间划分红若干个时间段,每一个时间段再分配给各个线程执行,当一个线程在运行时,其它线程处于挂起状。从宏观角度是同时进行的,但从微观角度并非同时进行。
     CPU根据线程调度算法来切换线程。当正在执行的一个线程须要进行IO操做或者须要访问内存的时候,CPU彻底能够放弃该线程,转而调度线程就绪队列上的其余线程,被放弃的线程则进入阻塞状态,IO操做或者访问内存操做结束以后,该线程能够进入线程就绪队列上。
     典型的线程调度算法:(1) FIFO算法。在非抢占式系统中,全部的线程构成一个先进先出队列,最早进入队列的线程得到CPU,等到放弃处CPU时,又回到队列尾部,下一个线程继续执行。如有新的线程进来,则添加到队列尾部。(2) 时间片轮转调度算法。(3) 优先级调度算法。


8、并行

并行是同一时刻当一个CPU执行一个线程时,另外一个CPU能够执行另外一个线程,两个线程互不抢占CPU资源,是真正意义上的不一样线程在同一时刻同时执行。