进程和线程有什么区别?
答案:进程就是一个程序运行起来的状态,线程是一个进程中的不同的执行路径。
专业:进程是OS分配资源的基本单位,线程是执行调度的基本单位。
分配资源最重要的是:独立的内存空间,线程调度执行(线程共享进程的内存空间,没有自己独立的内存空间)
纤程:用户态的线程,线程中的线程,切换和调度不需要经过OS
优势:
1:占有资源很少 OS : 线程1M Fiber:4K
2:切换比较简单
3:启动很多个
目前支持内置纤程的语言:Kotlin Scala Go Python(lib)
纤程 vs 线程池:很短的计算任务,不需要和内核打交道,并发量高
进程的创建和启动:
系统函数fork() exec() ,从A中fork B的话,A称之为B的父进程
僵尸进程:
ps – ef | grep defuct父进程产生子进程后,会维护子进程的一个PCB结构,子进程退出,由父进程释放如果父进程没有释放,那么子进程成为一个僵尸进程孤儿进程:
子进程结束之前,父进程已经退出,孤儿进程会成为init进程的孩子,由1号进程维护
进程调度:
Linux2.6采用CFS(完全公平调度算法)调度策略:Completely Fair Scheduler
按优先级分配时间片的比例,记录每个进程的执行时间,如果有一个进程执行时间不到他应该分配的比例,优先执行
默认调度策略:
实时 :(相当于急诊) 优先级分高低 - FIFO (First In First Out),优先级一样 - RR(Round Robin),其中等级最高的是FIFO,这种进程除非自己让出CPU,否则Linux会一直执行它
除非更高等级的FIFO和RR抢占它;RR只是这种线程中是同级别FIFO中的平均分配只有实时进程主动让出,或者执行完毕后,普通进程才有机会运行普通: CFS
进程调度基本概念:
进程类型:• IO密集型大部分时间用于等待IO• CPU密集型大部分时间用于闷头计算进程优先级• 实时进程 > 普通进程(0 - 99)• 普通进程nice值(-20 - 19)时间分配• linux采用按优先级的CPU时间比• 其他系统多采用按优先级的时间片
从单任务(独占)到 多任务(分时):最大限度的压榨CPU资源
多任务:非抢占式:除非进程主动让出CPU,否则将一直运行抢占式:由进程调度器强制开始或暂停(抢占)某一进程的执行
中断:
硬件跟操作系统内核打交道的一种机制
软中断(80中断) == 系统调用
系统调用:int 0x80 或者 sysenter原语
通过ax寄存器填入调用号
参数通过bx cx dx si di传入内核