C++面试:进程、线程、协程

学习自视频:校招吊打大厂面试官!基础知识信手拈来,算法秒过!_哔哩哔哩_bilibili


进程是操作系统分配资源的基本单位,进程的三大状态:堵塞态、就绪态、运行态

就绪态是一种可以被调度的状态、运行态是正在被CPU执行

线程是操作系统调度的基本单位,是进程中可以执行的最小单元,进程中可有多个线程并行执行

从内存角度:线程没有自己独立的虚拟地址空间,但是每个进程都有独立的虚拟地址空间

从通信角度:线程的通信比较方便,线程之间的切换轻量级,从堆上面直接通信,而进程间通信比较复杂(IPC),上下文进程之间的切换开销较大

从安全性角度:进程中的某个线程挂掉了,则整个进程全部挂掉;但是如果某个进程挂掉了,其他进程不受影响,因为虚拟地址空间是独立的

从相互切换角度: 进程间的相互切换比较重,需要切换页表,本身是一个开销,而线程相互切换只需要切换硬件上下文

协程的本质是运行在用户态的一个线程,在堆区模拟出来一块空间,分配一个协程号,然后分配到寄存器,则成功创建一个协程。切换时完全在用户态进行操作,对操作系统来说是透明的,所有的调度由用户自己完成

(IPC)即进程间通信,是操作系统提供的一种机制,使得不同的进程之间能够交换数据、协调工作。详细的IPC通常包含以下几个方面:

  1. 管道(Pipes):是半双工的,允许进程间按顺序传递数据,常用于父子进程间的通信。

  2. 命名管道(FIFO,亦称 FIFO 文件):类似于管道,但数据存储在文件系统中,可供多个进程同时读写,是一种先进先出(First-In-First-Out)的数据队列。

  3. 消息队列(Message Queues,MQ):提供了一种可靠的消息传递机制,允许进程异步发送和接收数据,适合大量数据或长距离通信。

  4. 共享内存(Shared Memory):两个或多个进程可以直接访问同一块内存区域,可以实现实时数据交换,速度最快但安全性较差,需要特别管理。

  5. 信号量(Semaphore):一种计数机制,用于控制对公共资源的访问权限,防止竞态条件。

  6. 套接字(Sockets):跨网络的高级通信方式,可用于不同机器间通信,支持多种协议如TCP/IP,适用于远程进程间的交互。

  7. 命名空间(Namespaces):在Linux中,如PID namespace和Network namespace等,允许进程隔离彼此的行为,增强安全性和资源管理。

  8. 共享对象/动态链接库(Shared Objects/DLLs):进程可以加载共享对象,使其函数成为进程的一部分,便于模块化和复用。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值