内核线程与用户线程区别、同步互斥的实现原理——详解

一、内核线程与用户线程区别

根据操作系统对线程是否可以感知,将线程分为内核线程与用户线程。内核线程的活动都是内核操作完成的,而用户线程的操作都是利用线程库来调用完成的。

1.1 线程实现的方式

内核线程:为了实现线程,内核里就需要有用来记录系统里所有线程的线程表。当需要创建一个新线程的时候,就需要进行一个系统调用,然后由操作系统进行线程表的更新。

用户线程:将创建线程与销毁线程的函数放入了线程库,调用API函数来创建用户线程。

1.2 线程切换时的消耗

内核线程:因为内核线程在调度时操作系统需要从用户态转变为内核态,切换完成后还需要进行切换,所以代价比较大。

用户线程:可在当前的进程环境内进行切换。

1.3 生成线程数量限制

内核线程:因为操作系统内有一个线程表进行控制,线程表是存放在操作系统固定的表格空间或者堆栈空间里,所以内核级线程的数量是有限的,扩展性比不上用户级线程

用户线程:每个进程都可以创建许多自己的线程。

1.4 线程之间的影响

内核线程:一个线程阻塞,其他线程继续运行也可以提高多CPU处理器的效率。

用户线程:进程被阻塞,他的所有线程都会被阻塞。

1.5 调度的灵活性

内核线程:有固定的调度算法,为了不影响操作系统稳定性,所以尽量不改动。

用户线程:可以根据自己的需求设置调度算法。

一个图表示区别:

 二、操作系统线程同步、互斥的实现

临界区:当多个线程访问一个独占性共享资源时,可以使用临界区对象。拥有临界区的线程可以访问被保护起来的资源或代码段,其他线程若想访问,则被挂起,直到拥有临界区的线程放弃临界区为止。

事件:通过线程间触发事件实现同步互斥。

互斥量 :适合不同进程内多线程访问公共区域或代码段时使用,与临界区相似。

信号量:与临界区和互斥量不同,可以实现多个线程同时访问公共区域数据,先设置一个访问公共区域的线程最大连接数,每有一个线程访问共享区资源数就减一,直到资源数小于等于零。

  • 1
    点赞
  • 6
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

西邮小菜机

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值