进程·线程·协程
2024-03-18 本文已影响0人
妖都幽灵
进程由用户空间内存(指令/数据/堆栈)和内核私有的每个进程的状态组成。
协程在用户空间切换这种说法其实是不准确的,在用户视角看起来是两个任务在切换,但是在内核视角,由于内核并不认识协程,其执行的基本单位是线程,协程在线程里面,所以内核角度来看,并没有什么东西发生了切换,所以协程的执行效率比线程高。
我们再说说线程中的⼀种特殊情况 - 内核线程。对于内核线程来说,由于它只⼯作在地址空间固定较⾼的那部分,所以并没有涉及到对虚拟内存部分的使⽤。内核线程的mm_struct都是null。在内核内存区域,可以通过直接计算得出物理内存地址,不需要复杂的⻚表计算。⽽且最重要的是所有内核进程、以及⽤户进程的内核态,这部分内存都是共享的。
区分⼀个任务该叫线程还是改叫进程,⼀个主要的区分点就在于看它是否有独⽴的地址空间。如果有,就应该叫做进程,如果没有就应该叫做线程。对于内核任务来说,因为没有独⽴的地址空间,所以称之为线程更为合适。所以应该叫内核线程⽽不是内核进程
ps -aux —sort=-%cpu | head命令用来查看消耗cpu比较多的进程
pidstat -p 进程号 显示进程使用资源的情况
cat /proc/{pid}/status 查看进程的状态,比如进程的自愿和非自愿切换状态