首页 > 系统相关 >进程和线程

进程和线程

时间:2023-06-13 12:11:21浏览次数:38  
标签:开销 多线程 线程 内核 进程 执行

概念

  • 进程:是并发执行的程序在执行过程中分配和管理资源的基本单位,是一个动态概念,是竞争计算机系统资源的基本单位
  • 线程:是进程的一个执行单元,是进程内调度实体,比进程更小的独立运行的基本单位
    进程线程区别
  • 地址空间:线程共享本进程的地址空间和资源,而进程之间是独立的地址空间和资源
  • 健壮性:多进程比多线程见状,一个进程崩溃后,在保护模式下不会对其他进程产生影响,但是一个线程崩溃则整个进程都死掉
  • 执行过程:每个独立的进程有一个程序运行的入口、顺序执行序列和程序出口,执行开销大;线程不能独立执行,必须依存在应用程序中,由应用程序提供多个线程执行控制,执行开销小
  • 切换:每个进程都有独立的代码和数据空间(程序上下文),进程之间的切换会有较大的开销;线程共享代码和数据空间,每个线程都有自己独立的运行栈和程序计数器(PC),线程之间切换开销小
  • 线程是处理器调度的基本单位,进程是操作系统资源分配的基本单位

使用多进程、多线程的情况

  • 对资源的管理和保护要求高,不限制开销和效率时,使用多进程
  • 要求效率高、频繁切换时,资源的保护和管理要求不是很高时,使用多线程

线程通信方式

  • 进程与进程之间交换数据必须通过内核,在内核中开辟一块缓冲区,进程1把数据从用户空间拷贝到内核缓冲区,进程2再从内核缓冲区把数据读走,内核提供的这种机制称为进程间通信机制
  • 管道(匿名管道)
    • 速度慢,通量有限,只有父子进程能通信
    • 一个管道只能进行单向通信,存在一个写端和读端
    • 存在于内存中的特殊我呢见
  • 命名管道(FIFO)
    • 提供一个路径名与之关联,以FIFO文件形式存储在文件系统中
    • 只要能访问这个文件,任何进程间都能通讯,但速度慢
    • 存在于硬盘中的文件
  • 消息队列
    • 本质是内核提供的链表
    • 向消息队列写数据,实际是插入一个节点;从消息队列读数据,实际上是从链表中删除一个节点
  • 信号量
    • 不能传递复杂消息,只能用来同步
  • 共享内存区
    • 速度对快
    • 一般配合信号量完成互斥操作

标签:开销,多线程,线程,内核,进程,执行
From: https://www.cnblogs.com/sunjianzhao/p/17477165.html

相关文章

  • 小灰灰深度学习day9——多线程读取小批量数据(这里运行的时候报错了,目前还不会解决,
    在这里先把代码放上来importtorchimporttimeimportnumpyasnpimporttorchvisionfromtorch.utilsimportdatafromtorchvisionimporttransformsfromd2limporttorchasd2ld2l.use_svg_display()#利用svg显示图片importosos.environ["KMP_DUPLICATE_LIB_OK......
  • 关于进程、线程、协程的概念以及Java中的应用
    进程、线程、协程本文将从“操作系统”、“Java应用”上两个角度来探究这三者的区别。一、进程在我本人的疑惑中,我有以下3个问题。1.1为什么要引入进程?在“多道程序环境下”,允许多个程序并发执行,此时它们将失去封闭性,并具有间断性以及不可再现性的特征,因此需要引入进程的概念......
  • oracle 数据库当前连接查询 被占用的连接 哪些用户正在使用数据 杀掉进程
    --查询数据库当前进程的连接数:selectcount(*)fromv$process;--查看数据库当前会话的连接数:selectcount(*)fromv$session;--查看数据库的并发连接数:selectcount(*)fromv$sessionwherestatus='ACTIVE';--查看当前数据库建立的会话情况:selectsid,serial#,username,pr......
  • 远程线程注入之突破Session0隔离会话
    前言当我们使用远程线程注入将dll注入至系统服务进程中往往会失败,这是因为大多数系统服务都是在Session0中运行的"Session0"是Windows操作系统中的一个特殊的会话,专门用于运行系统服务和其他在用户登录之前就需要运行的程序。从WindowsVista和WindowsServer2008开始,为了提高......
  • 2020-10-26 多线程学习1
    join关键字测试:publicclassTestJoin{publicstaticvoidmain(String[]args)throwsInterruptedException{//TODOAuto-generatedmethodstubfor(inti=0;i<3;i++){ThreadTestt1=newThreadTest("A");......
  • 进程在用户态和内核态的区别[独家解析]
     先看基础常识:基础内核在创建进程的时候,会为进程创建相应的堆栈。   每个进程会有两个栈,一个用户栈,存在于用户空间,一个内核栈,存在于内核空间。 当进程在用户空间运行时,CPU寄存器里面的内容是用户堆栈地址,使用用户栈  当进程在内核空间时,CPU寄存器里面的内容是内核栈......
  • Java 线程池简单使用
    privatefinalThreadPoolExecutorhandleExecutor=newThreadPoolExecutor(3,5,5000L,TimeUnit.MILLISECONDS,newLinkedBlockingQueue<>(),newThreadFactoryBuilder().setNameFormat("MsgCenterHandle-%d").build());......
  • 根据进程找出执行进程的用户
    为了根据进程找出work用户的IP,需要使用以下步骤:执行如下命令列出所有进程以及它们的详细信息:ps-ef在输出结果中,找到工作(work)用户对应的进程,并记录下该进程的PID。执行如下命令查看与该进程相关的网络连接信息:netstat-anp|grep[PID]将[PID]替换为第二步中记......
  • 根据进程查看内存使用情况
    根据进程查看内存使用情况使用以下命令找到进程ID(PID):psaux|grep<进程名>其中,“<进程名>”是您要查找的进程名称。此命令将返回相关进程的所有详细信息(包括PID、用户等)和进程名。在上面的输出结果中,查找目标进程的PID。执行以下命令,以使用PID来检索该进程的内存占用......
  • 根据端口找到进程pid
    [root@localhostluban]#netstat-anp|grep"8999"tcp600:::8999:::*LISTEN93234/./luban#这里的93234就是占用8999端口进程的pid[root@localhostluban]#ps-ef|greplubanroot9323491770016:......