https://hit-alibaba.github.io/interview/basic/arch/Concurrency.html
本地进程间通信的方式有很多,可以总结为下面四类:
- 消息传递(管道、FIFO、消息队列)
- 同步(互斥量、条件变量、读写锁、文件和写记录锁、信号量)
- 共享内存(匿名的和具名的)
- 远程过程调用(Solaris门和Sun RPC)
32位系统一个进程最多有多少堆内存
多线程和多进程的区别(重点面试官最最关心的一个问题,必须从cpu调度,上下文切换,数 据共享,多核cup利用率,资源占用,等等各方面回答,然后有一个问题必须会被问到:哪些 东西是一个线程私有的?答案中必须包含寄存器,否则悲催) 我们按照多个不同的维度,来看看多进程和多线程的对比(注:都是相对的,不是说一个好得 不得了,另一个差的无法忍受)
维度 | 多进程 | 多线程 | 总结 |
---|---|---|---|
数据共享、同步 | 数据是分开的:共享复杂,需要用IPC;同步简单 | 多线程共享进程数据:共享简单;同步复杂. | 各有优势 |
内存、CPU | 占用内存多,切换复杂,CPU利用率低 | 占用内存少,切换简单,CPU利用率高 | 线程占优 |
创建销毁、切换 | 创建销毁、切换复杂,速度慢 | 创建销毁、切换简单,速度快 | 线程占优 |
编程调试 | 编程简单,调试简单 | 编程复杂,调试复杂 | 进程占优 |
可靠性 | 进程间不会相互影响 | 一个线程挂掉将导致整个进程挂掉 | 进程占优 |
分布式 | 适应于多核、多机分布;如果一台机器不够,扩展到多台机器比较简单 | 适应于多核分布 | 进程占优 |
然后我们来看下线程和进程间的比较
- 需要频繁创建销毁的优先用线程。 实例:web服务器。来一个建立一个线程,断了就销毁线程。要是用进程,创建和销毁的代价是很难承受的。
2)需要进行大量计算的优先使用线程。 所谓大量计算,当然就是要消耗很多cpu,切换频繁了,这种情况先线程是最合适的。实例:图像处理、算法处理。
3)强相关的处理用线程,弱相关的处理用进程。 什么叫强相关、弱相关?理论上很难定义,给个简单的例子就明白了。 一般的server需要完成如下任务:消息收发和消息处理。消息收发和消息处理就是弱相关的任务,而消息处理里面可能又分为消息解码、业务处理,这两个任务相对来说相关性就要强多 了。因此消息收发和消息处理可以分进程设计,消息解码和业务处理可以分线程设计。
4)可能扩展到多机分布的用进程,多核分布的用线程。
5)都满足需求的情况下,用你最熟悉、最拿手的方式。
- 用户登录。
- 作业调度。
- 提供服务。
- 应用请求。
- 创建一个PCB
- 赋予一个统一进程标识符
- 为进程映象分配空间
- 初始化进程控制块
- 许多默认值 (如: 状态为 New,无I/O设备或文件...)
- 设置相应的链接。如: 把新进程加到就绪队列的链表中
进程阻塞过程
停止当前进程的执行;保存该进程的CPU现场信息;将进程状态改为阻塞态,并将其PCB入相应的阻塞队列;转进程调度程序。
进程唤醒过程
首先把被阻塞的进程从等待该事件的阻塞队列中移出,将其PCB中的现行状态由阻塞改为就绪,然后再将该PCB插入到就绪队列中.
进程切换:中断处于运行态的进程运行,让出处理器,恢复新进程的状态,使新进程投入运行。 当系统调度新进程占有处理器时,新老进程随之发生上下文切换。 进程的运行被认为是在进程的上下文中执行的。
进程上下文:操作系统中把进程物理实体和支持进程运行的环境合称为进程上下文(context)。进程实体+运行环境。
- 用户级上下文:由用户程序块、用户数据块和用户堆栈组成的进程地址空间。
- 系统级上下文:由进程控制块、内存管理信息、进程环境块,及系统堆栈等组成的进程地址空间。
- 寄存器上下文:由PSW寄存器和各类控制寄存器、地址寄存器、通用寄存器组成、用户栈指针等组成。
- 保存被中断进程的处理器现场信息
- 修改被中断进程的进程控制块的有关信息,如进程状态等
- 把被中断进程的PCB加入有关队列
- 选择下一个占有处理器运行的进程
- 修改被选中进程的PCB的有关信息
- 根据被选中进程设置操作系统用到的地址转换和存储保护信息
- 根据被选中进程恢复处理器现场
- 一个进程所能分配的最大内存是多大?这是由什么决定的? 32位2G,操作系统与硬件共同决定。 https://www.zhihu.com/question/29468200