linux Kernel 多核多线程编程

本文介绍了Linux内核线程、用户线程的区别,内核线程同步的原因,如中断、睡眠与用户空间同步、多CPU执行等。探讨了工作队列、tasklet的选择,以及信号量和自旋锁的应用场景。同时,文章讨论了电源管理在休眠/唤醒流程中的作用,以及如何避免重入问题,涉及中断、线程同步和系统休眠的细节。
摘要由CSDN通过智能技术生成

一.线程/进程

进程:资源管理的最小单位

线程:执行任务的最小单位

内核线程:内核空间创建,类似用户进程,但运行期间不能被抢断

用户线程:用户空间创建,拥有进程上下文,可调度可睡眠

 

.内核线程的同步原因

@中断:几乎可以在任何时刻发生,随时打断当前执行的代码;

@睡眠和与用户空间的同步:内核线程的睡眠,会唤醒调度程序,从而导致新用户进程执行;

@对称对处理:多个cpu可以同时执行代码;

@内核抢断:2.6以后,内核具有抢占性,内核中的任务可以被另一任务抢占;

 

三.工作队列和tasklet的选择

需要睡眠的任务—wq

需要延时的任务—wq

需要在1tick内处理的任务—tasklet

对执行时间没有需求的任务—wq

 

工作队列的本质就是将任务交给内核线程处理,它实现了内核线程的封装。

一个工作队列对应拥有n个(cpu个数)内核线程,每个线程对应运行在单独的cpu上。

一个tasklet只能运行在一个cpu上,不同的tasklet可以运行在不同的cpu上。

 

四.信号量和自旋锁的选择

低开销加锁—spinlock优先

短期加锁—spinlock优先

长期加锁---mutex

  • 0
    点赞
  • 9
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值