进程与线程的对比

2018/09/22

定义的不同

  1. 进程是系统进⾏资源分配的最⼩单位.
  2. 线程是进程的⼀个实体, 是CPU进⾏调度的基本单位, 它是⽐进程更⼩的能独⽴运⾏的基本单位.线程⾃⼰基本上不拥有系统资源,只拥有⼀点在运⾏中必不可少的资源(如程序计数器,⼀组寄存器和栈),但是它可与同属⼀个进程的其他的线程共享进程所拥有的全部资源.

区别

  1. ⼀个程序⾄少有⼀个进程,⼀个进程⾄少有⼀个线程.
  2. 线程的划分尺度⼩于进程(资源⽐进程少), 使得多线程程序的并发性⾼。
  3. 进程在执⾏过程中拥有独⽴的内存单元, ⽽多个线程共享内存, 从⽽极⼤地提⾼了程序的运⾏效率
  4. 线程不能够独⽴执⾏, 必须依存在进程中

优缺点

线程和进程在使⽤上各有优缺点: 线程执⾏开销⼩, 但不利于资源的管理和保护; ⽽进程正相反。

  • 底层中, 每个线程通过 其对应的计算器 进行 追踪执行

  • 【资源竞争】 导致数据不安全, 从而导致 线程或进程的不安全

eg: 2个线程对一个全局变量num的修改, 如果不进行线程加锁, 那么对全局变量的的修改, 会导致资源竞争, 又由于对全局变量进行修改, 实质底层是进行[原子操作], 例如线程1对num先进行读取了, 但是线程1被暂停了 转向执行线程2, 线程2完成了对num的加1操作, 线程2暂停, 转向线程1执行, 而线程1 不会继续读取, 而是用前面读到num的值, 然后进行加1, 如此反复, 从而导致最终的结果与预期结果不同

原子操作 eg. num += 1 等价于 1.先读取num 2. 进行num+1 3. 把num+1的值复制给num