一.线程/进程
进程:资源管理的最小单位
线程:执行任务的最小单位
内核线程:内核空间创建,类似用户进程,但运行期间不能被抢断
用户线程:用户空间创建,拥有进程上下文,可调度可睡眠
二.内核线程的同步原因
@中断:几乎可以在任何时刻发生,随时打断当前执行的代码;
@睡眠和与用户空间的同步:内核线程的睡眠,会唤醒调度程序,从而导致新用户进程执行;
@对称对处理:多个cpu可以同时执行代码;
@内核抢断:2.6以后,内核具有抢占性,内核中的任务可以被另一任务抢占;
三.工作队列和tasklet的选择
需要睡眠的任务—wq
需要延时的任务—wq
需要在1个tick内处理的任务—tasklet
对执行时间没有需求的任务—wq
工作队列的本质就是将任务交给内核线程处理,它实现了内核线程的封装。
一个工作队列对应拥有n个(cpu个数)内核线程,每个线程对应运行在单独的cpu上。
一个tasklet只能运行在一个cpu上,不同的tasklet可以运行在不同的cpu上。
四.信号量和自旋锁的选择
低开销加锁—spinlock优先
短期加锁—spinlock优先
长期加锁---mutex