进程 线程 纤程 中断
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()