linux进程和线程
linux进程和线程 的区别与联系是什么
linux 进程和线程:
1、区别是不同的操作系统资源管理方式,进程有独立的地址空间,而线程之间没有单独的地址空间;
2、联系是一个线程可以创建和撤销另一个线程,同一个进程中的多个线程之间可以并发执行,线程只是一个进程中的不同执行路径。
linux进程和线程 的区别与联系是什么
联系:
一个线程可以创建和撤销另一个线程;同一个进程中的多个线程之间可以并发执行.
相对进程而言,线程是一个更加接近于执行体的概念,它可以与同进程中的其他线程共享数据,但拥有自己的栈空间,拥有独立的执行序列。
区别:
进程和线程的主要差别 在于它们是不同的操作系统 资源管理方式。进程 有独立的地址空间,一个进程崩溃后,在保护模式下 不会对其它进程 产生影响,而线程 只是一个进程中的不同执行路径。线程 有自己的堆栈 和 局部变量,但线程 之间没有单独的 地址空间,一个线程 死掉就等于整个进程 死掉,所以多进程的程序 要比多线程的程序健壮,但在进程切换时,耗费资源较大,效率要差一些。但对于一些要求同时 进行并且又要 共享某些变量的 并发操作,只能用线程,不能用进程。
- 简而言之,一个程序 至少 有一个进程,一个进程 至少有一个 线程.
- 线程的划分尺度小于进程,使得多线程 程序的并发性高。
- 另外,进程在执行过程中 拥有独立的 内存单元,而多个线程 共享内存,从而极大地 提高了程序的 运行效率。
- 线程在执行过程中 与进程还是 有区别的。每个独立的线程 有一个程序 运行的入口、顺序执行序列 和 程序的出口。但是线程 不能够 独立执行,必须依存在 应用程序中,由应用程序 提供多个线程 执行控制。
- 从逻辑角度来看,多线程的意义 在于一个应用程序中,有多个执行部分 可以同时执行。但操作系统 并没有将多个线程 看做多个独立的应用,来实现进程的调度 和 管理以及 资源分配。这就是进程 和 线程的重要区别。
扩展知识
在许多经典的操作系统 教科书中,总是把进程 定义为 程序的执行实例,它并不执行什么, 只是维护应用程序 所需的各种资源,而线程则 是真正的执行实体。
为了让进 程完成一定的工作,进程 必须至少 包含一个线程。
进程,直观点说,保存在硬盘上的程序 运行以后,会在内存空间里 形成一个独立的 内存体,这个内存体 有自己的 地址空间,有自己的 堆,上级挂靠单位 是 操作系统。
线程存在 与 进程当中,是操作系统 调度执行的 最小单位。说通俗点,线 程 就 是 干 活 的 。 \ color { red }{ 线程就是干活的。}线程就是干活的。
进程是 具有一定独立功能的 程序关于某个数据集合上 的一次运行活动,进程是系统进行资源分配和调度的一个独立单位。线程是进程的一个实体,是 CPU 调度和分派的基本单位,它是比进程更小的能独立运行的基本单位。线程自己基本上不拥有系统资源,只拥有一点在运行中必不可少的资源(如程序计数器,一组寄存器和栈),但是它可与同属一个进程的其他的线程共享进程所拥有的全部资源。
如果说进程是一个资源管家,负责从主人那里要资源的话,那么线程就是干活的苦力。如果说进程是一个资源管家,负责从主人那里要资源的话,那么线程就是干活的苦力。一个管家必须完成一项工作,就需要最少一个苦力,也就是说,一个进程最少包含一个线程,也可以包含多个线程。苦力要干活,就需要依托于管家,所以说一个线程,必须属于某一个进程。进程有自己的地址空间,线程使用进程的地址空间,也就是说,进程里的资源,线程都是有权访问的,比如说堆啊,栈啊,静态存储区什么的。
线程就是个无产阶级,但无产阶级干活,总得有自己的劳动工具吧,这个劳动工具就是栈,线程有自己的栈,这个栈仍然是使用进程的地址空间,只是这块空间被线程标记为了栈。每个线程都会有自己私有的栈,这个栈是不可以被其他线程所访问的。
进程所维护的是程序所包含的资源(静态资源), 如:地 址 空 间,打开的文件句柄集,文件系统状态,信号处理 handler ,等;
线程所维护的运行相关的资源(动态资源),如:运行栈,调度相关的控制信息,待处理的信号集,等;
线程和进程在使用上各有优缺点:线程执行开销小,但不利于资源的管理和保护;而进程正相反。