进程
进程就是一个程序的执行实例,也就是正在执行的程序,是操作系统资源分配的基本单位。
进程的概念主要有两点:
1. 进程是一个实体。每个进程都有独立的代码和数据空间(程序上下文),即自己的地址空间。
2. 进程是一个“执行中的程序”。程序是一个没有生命的实体,只有处理器赋予程序生命时(操作系统执行之),它才能成为一个活动的实体,我们称其为进程。
一个应用程序可以同时对应多个进程,即所谓的多进程服务。
比如下边 我打开了一个记事本(1个进程),打开了一个chrome并开了两个标签页(2个进程)。
线程
线程是cpu底层的处理能力, 是CPU调度和分派的基本单位 ,
线程可看做轻量级进程,同一类线程共享代码和数据空间(想想单线程的js),每个线程都有自己独立的运行栈和程序计数器。
单核CPU同一时间只能处理1个线程(任务),也就只能处理一件事情。
那如果我有双核的,那就不一样了,可以在同一时间做多件事情,这就是并发,举例如下
如果两个线程各自花费10s执行,那么在2处理器系统上,净时间为10s
如果两个线程各自花费10s执行,那么在1个处理器系统上,净时间为20s
进程与线程关系
进程是(操作系统)资源分配的最小单位,而线程是cpu调度的最小单位。
- 线程是进程的一部分,一个线程只能属于一个进程,一个进程可以有多个线程,但至少有一个线程。
- 操作系统在运行的时候会为每个进程分配不同的内存空间,而CPU则会进一步的为线程分配内存空间(即真正在处理器运行的是线程)
- 同一个进程的所有线程共享该进程所有资源。
- 线程在执行过程中需要协作同步,不同进程的线程间要利用消息通信的办法实现同步。
- (排除cpu能力限制的情况下)在操作系统中能同时运行多个进程(程序),在同一个进程(程序)中又能多个线程同时执行。
- 程序间的切换开销大,线程间切换开销小