day9-进程与线程介绍
什么是进程?
定义:指在系统中能独立运行并作为资源分配的基本单位,它是由一组机器指令、数据和堆栈等组成的,是一个能独立运行的活动实体,程序执行的实例称为进程。
说明:每个进程提供执行程序所需的资源。进程具有虚拟地址空间,可执行代码,系统对象的打开句柄,安全上下文,唯一进程标识符pid,环境变量,优先级类别,最小和最大工作集大小以及至少一个执行线程。每个进程都使用单线程启动,通常称为主线程,但也可以从其任何线程创建其他线程。
程序并不能单独运行,只有将程序装载到内存中,系统为它分配资源才能运行,而这种执行的程序就称之为进程。程序和进程的区别就在于:程序是指令的集合,它是进程运行的静态描述文本;进程是程序的一次执行活动,属于动态概念。
在多道编程中,我们允许多个程序同时加载到内存中,在操作系统的调度下,可以实现并发地执行。这是这样的设计,大大提高了CPU的利用率。进程的出现让每个用户感觉到自己独享CPU,因此,进程就是为了在CPU上实现多道编程而提出的。
有了进程为什么还要线程?
进程有很多优点,它提供了多道编程,让我们感觉我们每个人都拥有自己的CPU和其他资源,可以提高计算机的利用率。很多人就不理解了,既然进程这么优秀,为什么还要线程呢?其实,仔细观察就会发现进程还是有很多缺陷的,主要体现在两点上:
- 进程只能在一个时间干一件事,如果想同时干两件事或多件事,进程就无能为力了。
- 进程在执行的过程中如果阻塞,例如等待输入,整个进程就会挂起,即使进程中有些工作不依赖于输入的数据,也将无法执行。
什么是线程
定义:线程是操作系统能够进行运算调度的最小单位。它被包含在进程之中,是进程中的实际运作单位。一条线程指的是进程中一个单一顺序的控制流,一个进程中可以并发多个线程,每条线程并行执行不同的任务。
线程是一个执行上下文,它是CPU执行指令流所需的全部信息。
假设你正在读一本书,而你现在想休息一下,但是你希望能够从你停下来的确切位置回来继续阅读。一种方法是通过记下页码,行号和字数。所以你阅读一本书的执行环境就是这3个数字。如果你有一个室友,而且她正在使用同样的技术,她可以拿着这本书,而不使用它,并从停止的地方恢复阅读。那么你可以把它收回来,从你原来的地方恢复。
线程以相同的方式工作。一个CPU给你的错觉是,它正在同时进行多个计算。它通过在每个计算上花费一点时间来做到这一点。它可以这样做,因为它具有每个计算的执行上下文。就像你可以和你的朋友分享一本书一样,许多任务可以共享一个CPU。
在更技术层面上,执行上下文(就是一个线程)由CPU寄存器的值组成。
最后:线程与进程不同。线程是执行的上下文,而进程是与计算相关的一堆资源。一个进程可以有一个或多个线程。
说明:与进程相关的资源包括内存页面(进程中的所有线程都具有相同的内存视图),文件描述符(例如打开的socket)和安全凭证(例如,启动处理)。
进程与线程的区别
- 线程共享内存空间,进程的内存是独立的
- 线程可以直接访问此进程中的数据部分;进程有他们独立拷贝自己父进程的数据部分,每个进程是独立的
- 同一个进程的线程之间可以直接交流,两个进程想通信,必须通过一个中间代理来实现
- 创建新线程很简单,创建新进程需要对其父进程进行一次克隆
- 一个线程可以控制和操作同一进程里的其他线程,但是进程只能操作子进程,线程与线程之间没有隶属关系
- 对主线程的修改,可能会影响到进程中其他线程的修改;对于一个父进程的修改不会影响其他子进程(只要不删除父进程即可)
FAQ?
1.进程和线程哪个速度快?
答:首先,进程和线程是没有可比性的,因为进程是资源的集合,线程是真正执行任务的,进程通过线程来执行任务。所以这个问题就有问题。
2.启动一个线程快还是启动一个进程快?
答:先有进程再有线程,因为进程是一堆资源的集合,它要到内存里面申请内存空间,但是线程它只是一堆指令,所以启动一个线程快,但是他们一运行,进程和线程都是一样的,因为进程是通过线程来运行的。