Linux多进程与多线程之间的关系(包含用户态进程、用户态线程、轻量级进程以及内核线程)
用户态进程、用户态线程、轻量级进程以及内核线程之间的关系
调度:
在Linux中,只存在对进程进行调度这一种说法,因为从内核的角度来说,它并没有线程这个概念,Linux把所有线程都当做进程来实现(轻量级进程),内核并没有准备特别的调度算法或定义特别的数据结构来表征线程,线程仅仅被视为一个实用某些共享资源的进程。
总结下上面说的调度结果
若存在A、B两进程,且A进程中跑了a,b两线程,B进程中跑了c,d两线程。则A、B两进程启动时是继承了shell的调度策略(因为其本质是由shell进程fork出来的)(应该是普通的分时进程),A进程中的a,b两线程和B进程中的c,d两线程则可选择SCHED_FIFO先入先出的实时进程、SCHED_RR时间片轮转的实时进程,以及SCHED_OTHER普通的分时进程这三种方式来进行调度
Linux下进程的6种状态
R(Running or Runnable):处于运行或能(可)运行状态
S(Interruptible Sleep):处于可中断的睡眠状态(等待某事件而被挂起)
D(Uninterruptible Sleep):处于不可中断的睡眠状态(进程不响应异步信号,无法用kill命令杀死。一般由等待I/O引起)
T(Stopped or Traced):处于暂停或跟踪状态
Z(Dead_Exit_Zombie):处于僵死状态,
X(Dead_Exit_Dead):处于退出状态(一般极其短暂,可以忽略)
Linux下线程的4种状态
就绪态、运行态、阻塞态和终止
进程6种状态与线程4种状态的对应关系(自身理解)