操作系统原理之线程的分类:用户级线程和内核级线程
2022-11-28 19:45 杭伟 阅读(205) 评论(0) 编辑 收藏 举报本篇文章作为Java并发编程的前置重点知识,有助于理解乐观锁和悲观锁。
这个世界上只有两种锁-->
乐观锁:指的是在操作数据的时候非常乐观,乐观地认为别人不会同时修改数据,因此乐观锁默认是不会上锁的,只有在执行更新的时候才会去判断在此期间别人是否修改了数据,如果别人修改了数据则放弃操作,否则执行操作。
悲观锁:指的是在操作数据的时候比较悲观,悲观地认为别人一定会同时修改数据,因此悲观锁在操作数据时是直接把数据上锁,直到操作完成之后才会释放锁,在上锁期间其他人不能操作数据。
Java中大部分都是悲观锁,很多悲观锁本身也有一定的缺点,缺点即是:用户态和内核态的频繁切换消耗性能。
在这种背景下,乐观锁的思想应运而生。
再回到本篇主题。
用户级线程:应用程序管理的线程;优点:不需要内核模式特权,线程之间切换速度很快(不需要到内核态),
内核级线程:操作系统内核管理的线程,内核线程切换速度慢。
**用户线程完成系统调用的时候,还是要切换回用户态,继续执行代码的。
更多关于用户级线程和内核级线程,请移步
状态切换:
1,系统调用
比如:读写文件,申请内存(new对象时)等等,具体包括 进程、文件、设备、信息、通信等情况;
2,中断
3,异常
用户线程的阻塞和唤醒会映射到内核线程上,容易频繁引起内核态和用户态的切换。
比如Java中:AQS是基于用户态函数级别的锁;而jdk1.6之前的synchronized就是内核级别的重量级锁,本身会引起用户态到内核态的频繁切换。
(AQS中的挂起操作也涉及线程状态切换,但是AQS进行加锁的动作是通过一个声明为volatile的state关键字来控制)
作者:hangwei
出处:http://www.cnblogs.com/hangwei/
关于作者:专注于开源平台,分布式系统的架构设计与开发、数据库性能调优等工作。如有问题或建议,请多多赐教!
版权声明:本文版权归作者和博客园共有,欢迎转载,但未经作者同意必须保留此段声明,且在文章页面明显位置给出原文链接。
如果您觉得文章对您有帮助,可以点击文章右下角“推荐”一下。您的鼓励是作者坚持原创和持续写作的最大动力!