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

进程和线程 操作系统

时间:2023-12-13 23:35:46浏览次数:33  
标签:操作系统 通信 间通信 线程 内存 进程 执行

进程和线程是计算机的基础础概念,它们都是程序执行的基本单位。进程是操作系统资源(如内存、文件、设备等)分配的基本单位,而线程是处理器调度和执行的基本单位。进程和线程之间有一些区别,主要有以下几点:

  • 地址空间:线程共享进程的地址空间,也就是说,它们可以访问同一个内存区域。进程之间的地址空间是是独立的,也就是说,它们不能直接访问彼此的内存区域。
  • 资源:线程共享进程的资源,如内存、文件、设备等。这样可以减少资源的创建和销毁的开销,提高程序的效率。但是,这也带来了一些问题,比如数据竞争、死锁等。进程之间的资源是是独立的,也就是说,它们需要通过系统调用或者网络通信来获取或者释放资源。
  • 健壮性:多进程相比多线程更加健壮,因为一个进程程崩溃后,在保护模式下不会对其他进程产生影响。但是多线程相比多进程更加容易出现错误或者异常,因为一个线程程崩溃后可能会导致整个进程程崩溃。
  • 执行过程:每个个独立的进程有一个程序运行的入口、顺序执行序列和程序出口。执行开销大。但是线程不能能独立执行,必须依存在应用程序中,由应用程序提供多个线程执行控制。执行开销小。
  • 可并发性:两者均可并发执行。但是多进程可以充分利用多核CPU进行并发处理,而多线程则依赖于单个CPU的多个执行单元(如超线程或多核)进行并发执行。

进程间的通信(InterProcess Communication,IPC)是指进程之间的信息交换1。以下是一些常见的进程间通信方式:

  1. 管道(Pipe):管道是一种半双工的通信方式,数据只能单向流动,而且只能在具有亲缘关系的进程间使用1。管道分为无名管道和有名管道(FIFO)2

  2. 消息队列(Message Queue):消息队列是由消息的链表,存放在内核中并由消息队列标识符标识1。消息队列克服了信号传递信息少、管道只能承载无格式字节流以及缓冲区大小受限等缺点2

  3. 共享内存(Shared Memory):共享内存就是映射一段能被其他进程所访问的内存,这段共享内存由一个进程创建,但多个进程都可以访问1。共享内存是最快的 IPC 方式,它是针对其他进程间通信方式运行效率低而专门设计的2

  4. 信号量(Semaphore):信号量是一个计数器,可以用来控制多个进程对共享资源的访问2

  5. 套接字(Socket):套解口也是一种进程间通信机制,与其他通信机制不同的是,它可用于不同进程间的通信2

  6. 信号(Signal):信号是一种比较复杂的通信方式,用于通知接收进程某个事件已经发生2

 

 

  

标签:操作系统,通信,间通信,线程,内存,进程,执行
From: https://www.cnblogs.com/whcjob/p/17899899.html

相关文章

  • 线程池的执行原理
    1.线程池的核心参数线程池七大核心参数如下所示:publicThreadPoolExecutor(intcorePoolSize,intmaximumPoolSize,longkeepAliveTime,TimeUnitunit,BlockingQueue<Runnable>workQueue,ThreadFactorythreadFactory,......
  • 进程与端口的系统设计题
    #####题目1.FlowStatsSystem在一台计算机上运行着多个网络程序的进程,每个进程可以绑定多个端口,每个端口同一时刻只能被绑定在一个进程上,每个端口在绑定成功后可以接收网络报文。请设计一个流量统计的简易系统,实现下面接口:FlowStatsSystem()–系统初始化。bindport(intpi......
  • 杀死进程
    kill-9pid:杀死一个进程;kill-15pid:终止一个进程;这么描述这两个东东的定义似乎不太好理解,那么举个栗子:你现在在码字,然后你对象说快把洗衣机里面的衣服晾一下,你回答说“好的,等我把这点写完就去”,这个场景就相当于 kill-15pid的执行过程,当收到signal之后不是立马结束而是......
  • prometheus监控k8s集群node节点/linux操作系统
    prometheus监控k8s集群node节点/linux操作系统 一、监控linux操作系统1、下载二进制包wgethttps://github.com/prometheus/node_exporter/releases/download/v1.7.0/node_exporter-1.7.0.linux-amd64.tar.gz2、解压,移动至/opt并做软连接tarzxfnode_expo......
  • php获取详细访客信息,获取访客IP,IP归属地,访问时间,操作系统,浏览器,移动端/PC端,环境语言,访
    问题描述:需要获取访客访问网站信息1.代码示例与说明:<?phpheader("Content-Type:text/html;charset=utf-8");        //代码中涉及字符串处理,为防止汉字乱码需加编码说明functionchinesesubstr($str,$start,$len){          ......
  • Windows、Linux 和 Mac:操作系统之间的比较
    Windows系统、Linux系统与Mac系统:操作系统的对比与选择操作系统是管理和控制计算机硬件与软件资源的计算机程序,是直接运行在“裸机”上的最基本的系统软件,任何其他软件都必须在操作系统的支持下才能运行。操作系统是用户和计算机的接口,同时也是计算机硬件和其他软件的接口。以下是W......
  • Python学习多线程、多进程、多协程记录
    一、多线程应用于请求和IO#1.Python中关于使用多线程多进程的库/模块#2.选择并发编程方式(多线程Thread、多进程Process、多协程Coroutine)前置知识: 一、三种有各自的应用场景 1.一个进程中可以启动多个线程 2.一个线程中可以启动多个协程 二、各自优缺点 1......
  • 进程间通信-信号-pipe-fifo
    进程间通信-信号-pipe-fifo编译fifo文件夹的程序运行fifo文件夹的程序代码说明1.consumer.c文件包含一个用来从FIFO(命名管道)读取数据的C程序。以下是它的主要组件和系统调用的分解:main()函数:初始化文件描述符(pipe_fd)、返回状态(res)、读取数据的缓冲区以及字节数计......
  • 使用CEF(七)详解macOS下基于CEF的多进程应用程序CMake项目搭建
    由于macOS下的应用程序结构导致了CEF这样的多进程架构程序在项目结构、运行架构上有很多细节需要关注,这一块的内容比起Windows要复杂的多,所以本文将会聚焦macOS下基于CEF的多进程应用架构的环境配置,并逐一说明了CMake的相关用法和CEF应用配置细节。前言在进行搭建之前,我们首先必......
  • Java并发(十八)----常见线程安全类及实例分析
    1、常见线程安全类StringIntegerStringBufferRandomVectorHashtablejava.util.concurrent(JUC)包下的类这里说它们是线程安全的是指,多个线程调用它们同一个实例的某个方法时,是线程安全的。Hashtabletable=newHashtable();​newThread(()->{  ......