首页 > 系统相关 >进程与线程的区别

进程与线程的区别

时间:2022-10-23 23:47:02浏览次数:48  
标签:区别 创建 通信 线程 切换 进程 执行

一、线程的基本概念

  线程是进程中执行运算的最小单位,是进程中的一个实体,是被系统独立调度和分派的基本单位,线程自己不拥有系统资源,只拥有一点在运行中必不可少的资源,但它可与同属一个进程的其它线程共享进程所拥有的全部资源。一个线程可以创建和撤消另一个线程,同一进程中的多个线程之间可以并发执行。

好处 :
(1)易于调度。
(2)提高并发性。通过线程可方便有效地实现并发性。进程可创建多个线程来执行同一程序的不同部分。
(3)开销少。创建线程比创建进程要快,所需开销很少。
(4)利于充分发挥多处理器的功能。通过创建多线程进程,每个线程在一个处理器上运行,从而实现应用程序的并发性,使每个处理器都得到充分运行

二、进程与线程

进程:每个进程都有独立的代码和数据空间(进程上下文),进程间的切换会有较大的开销,一个进程包含1--n个线程。(进程是资源分配的最小单位)
线程:同一类线程共享代码和数据空间,每个线程有独立的运行栈和程序计数器(PC),线程切换开销小。(线程是cpu调度的最小单位)

线程和进程一样分为五个阶段:创建、就绪、运行、阻塞、终止。

多进程是指操作系统能同时运行多个任务(程序)
多线程是指在同一程序中有多个顺序流在执行
每个正在系统上运行的程序都是一个进程。每个进程包含一到多个线程。进程也可能是整个程序或者是部分程序的动态执行。线程是一组指令的集合,或者是程序的特殊段,它可以在程序里独立执行。也可以把它理解为代码运行的上下文。所以线程基本上是轻量级的进程,它负责在单个程序里执行多任务。通常由操作系统负责多个线程的调度和执行。

在Java中,一个应用程序可以包含多个线程。每个线程执行特定的任务,并可与其他线程并发执行多线程使系统的空转时间最少,提高CPU利用率、多线程编程环境用方便的模型隐藏CPU在任务间切换的事实在Java程序启动时,一个线程立刻运行,该线程通常称为程序的主线程。

主线程的重要性体现在两个方面:

1、它是产生其他子线程的线程。

2、通常它必须最后完成执行,因为它执行各种关闭动作。

三 线程与进程区别:

1.进程是资源(包括内存、打开的文件等)分配的单位,线程是CPU调度的单位;

2.进程拥有一个完整的资源平台,而线程只独享必不可少的资源,如寄存器和栈;

3.线程同样具有就绪、阻塞、执行三种基本状态,同样具有状态之间的转换关系;

4.线程能减少并发执行的时间和空间开销;

对于,线程相比进程能减少开销,体现在:
1.线程的创建时间比进程快,因为进程在创建的过程中,还需要资源管理信息,比如内存管理信息、文件管理信息,而线程在创建的过程中,不会涉及这些资源管理信息,而是共享它们;

2.线程的终止时间比进程快,因为线程释放的资源相比进程少很多;

3.同一个进程内的线程切换比进程切换快,因为线程具有相同的地址空间(虚拟内存共享),这意味着同一个进程的线程都具有同一个页表,那么在切换的时候不需要切换页表。而对于进程之间的切换,切换的时候要把页表给切换掉,而页表的切换过程开销是比较大的;

4.由于同一进程的各线程间共享内存和文件资源,那么在线程之间数据传递的时候,就不需要经过内核了,这就使得线程之间的数据交互效率更高了;
所以,不管是时间效率,还是空间效率线程比进程都要高。

在前面我们知道了,线程与进程最大的区别在于︰线程是调度的基本单位,而进程则是资源拥有的基本单位。

线程的优点:
一个进程中可以同时存在多个线程;。各个线程之间可以并发执行;
各个线程之间可以共享地址空间和文件等资源;
线程的缺点:
当进程中的一个线程崩溃时,会导致其所属进程的所有线程崩溃。

进程各自的运行状态:

在一个进程的活动期间至少具备三种基本状态,即运行状态、就绪状态、阻塞状态。加上创建状态结束状态。
线程同样具有就绪、阻塞、执行三种基本状态,同样具有状态之间的转换关系;

线程的通信方式和进程的通信方式

一、进程间的通信方式
1.管道( pipe ):
管道是一种半双工的通信方式,数据只能单向流动,而且只能在具有亲缘关系的进程间使用。进程的亲缘关系通常是指父子进程关系。
2.有名管道 (namedpipe) :
有名管道也是半双工的通信方式,但是它允许无亲缘关系进程间的通信。
3.信号量(semophore ) :
信号量是一个计数器,可以用来控制多个进程对共享资源的访问。它常作为一种锁机制,防止某进程正在访问共享资源时,其他进程也访问该资源。因此,主要作为进程间以及同一进程内不同线程之间的同步手段。
4.消息队列( messagequeue ) :
消息队列是由消息的链表,存放在内核中并由消息队列标识符标识。消息队列克服了信号传递信息少、管道只能承载无格式字节流以及缓冲区大小受限等缺点。
信号 (sinal ) :
信号是一种比较复杂的通信方式,用于通知接收进程某个事件已经发生。
5.共享内存(shared memory ) :
共享内存就是映射一段能被其他进程所访问的内存,这段共享内存由一个进程创建,但多个进程都可以访问。共享内存是最快的 IPC 方式,它是针对其他进程间通信方式运行效率低而专门设计的。它往往与其他通信机制,如信号两,配合使用,来实现进程间的同步和通信。
6.套接字(socket ) :
套接口也是一种进程间通信机制,与其他通信机制不同的是,它可用于不同设备及其间的进程通信。
二、线程间的通信方式
1.锁机制:包括互斥锁、条件变量、读写锁
互斥锁提供了以排他方式防止数据结构被并发修改的方法。
读写锁允许多个线程同时读共享数据,而对写操作是互斥的。
条件变量可以以原子的方式阻塞进程,直到某个特定条件为真为止。对条件的测试是在互斥锁的保护下进行的。条件变量始终与互斥锁一起使用。
2.信号量机制(Semaphore):包括无名线程信号量和命名线程信号量
3.信号机制(Signal):类似进程间的信号处理
线程间的通信目的主要是用于线程同步,所以线程没有像进程通信中的用于数据交换的通信机制。

标签:区别,创建,通信,线程,切换,进程,执行
From: https://www.cnblogs.com/wao7/p/16820057.html

相关文章

  • 查看进程使用的线程数量
    1、找到目标进程可以使用ps-ef命令,通过grep关键字来找到目标进程比如我想查看一个监控(prometheus)的进程,结果如下所示:红框内即为监控的进程号2、方法1:pstree命令pstree-p......
  • 进程和线程的区别
    1、进程:是程序的一次执行过程,是一个动态概念,是程序在执行过程中分配和管理资源的基本单位,每一个进程都有一个自己的地址空间,至少有5中基本状态,它们是初始态,执行态,等待状态,......
  • 无向图中 生成树,完全图,连通图 的区别
    图按照有无方向分为无向图和有向图。无向图由定点和边构成。有向图由定点和弧构成,弧有弧尾和弧头之分。 如果任意两个顶点之间都存在边叫做完全图。......
  • 进程与线程的区别
    进程一个在内存中运行的应用程序。每个进程都有自己独立的一块内存空间,一个进程可以有多个线程,比如在Windows系统中,一个运行的xx.exe就是一个进程。线程进程中的一个执行......
  • 线程与进程的区别
     进程是资源分配的基本单位,线程是调度的基本单位。这是一句名言,很好地概括了两者的区别。用一句话来概括就是:进程对应操作系统,线程对应CPU。我们常说的任务调度,其实通......
  • 线程和进程的区别
    进程:是指一个内存中运行的应用程序(已经在内存中运行的程序).一个进程都有一个独立的内存空间,一个电脑(手机)可以同时运行多个进程;进程也是程序的一次执行过程,是系统运行......
  • 线程和进程的区别
    ①概念:1.进程:一个在内存中运行的应用程序。每个进程都有自己独立的一块内存空间,一个进程可以有多个线程,比如在Windows系统中,一个运行的xx.exe就是一个进程。 2.线程:......
  • 守护线程、锁Synchronized
    一、守护线程(DaemonThread)1.1简介比如垃圾回收线程,就是最典型的守护线程。Java程序入口就是由JVM启动main线程,main线程又可以启动其他线程。当所有线程都运行结束时,JV......
  • 进程和线程
    在我的理解中.进程是一个很大的东西,它占据着自己独有的一片内存空间和各种资源,而线程却很惨.为什么这么说呢,众所周知,进程掌握了大量的资源,就跟老板一样,很有钱,然......
  • 进程与线程的区别
    进程一个进程就是CPU执行的单个任务的过程,是程序在执行过程当中CPU资源分配的最小单位,并且进程都有自己的地址空间,包含了运行态、就绪态、阻塞态、创建态、终止态五个状......