进程 线程 纤程 中断
1. 进程和线程有什么区别?#
进程是OS分配资源的基本单位
线程是执行调度的基本单位。
分配资源最重要的是:独立的内存空间,线程调度执行(线程共享进程的内存空间,没有自己独立的内存空间)
2. 什么是纤程#
用户态的线程,线程中的线程,切换和调度不需要经过OS
纤程的优势:
占有资源很少,线程占1M ,纤程占4K
切换比较简单
启动很多个10W+
纤程的应用场景:很短的计算任务,不需要和内核打交道,并发量高
3. 僵尸进程#
父进程产生子进程后,会维护子进程的一个PCB结构,子进程退出由父进程释放,如果父进程没有释放,那么子进程成为一个僵尸进程
危害:占用少量资源,比如进程号,Linux进程号是有限制的
4. 孤儿进程#
子进程结束之前,父进程已经退出,孤儿进程会成为init进程的孩子,由1号进程维护,基本没有危害
5. 进程调度基本概念#
进程类型
- IO密集型,大部分时间用于等待IO
- CPU密集型,大部分时间用于计算
进程优先级
- 实时进程>普通进程(0-99)
- 普通进程nice值(-20-19)
时间分配
- linux采用按优先级的cpu时间比
- 其他系统多采用按优先级的时间片
6. linux默认的调度策略#
对于实时进程:使用SCHED_FIFO和SCHED_RR两种
对于普通进程:使用CFS(Completely Fair Scheduler,按优先级分配时间片的比例,记录每个进程的执行时间,如果有一个进程执行时间不到他应该分配的比例,优先执行)
其中等级最高的是FIFO,这种进程除非自己让出CPU否则linux会一直执行它,除非更高等级的FIFO和RR抢占它
RR只是这种线程中是同级别FIFO中的平均分配
只有实时进程主动让出或者执行完毕,普通进程才有机会运行
7. 中断#
硬件跟操作系统内核打交道的一种机制
软中断(80中断) == 系统调用
系统调用:int 0x80 或者 sysenter原语
通过ax寄存器填入调用号
参数通过bx cx dx si di传入内核
返回值通过ax返回
java读网络 – jvm read() – c库read() - > 内核空间 -> system_call() (系统调用处理程序)-> sys_read()
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· go语言实现终端里的倒计时
· 如何编写易于单元测试的代码
· 10年+ .NET Coder 心语,封装的思维:从隐藏、稳定开始理解其本质意义
· .NET Core 中如何实现缓存的预热?
· 从 HTTP 原因短语缺失研究 HTTP/2 和 HTTP/3 的设计差异
· 周边上新:园子的第一款马克杯温暖上架
· 分享 3 个 .NET 开源的文件压缩处理库,助力快速实现文件压缩解压功能!
· Ollama——大语言模型本地部署的极速利器
· DeepSeek如何颠覆传统软件测试?测试工程师会被淘汰吗?
· 使用C#创建一个MCP客户端