大厂面试官问我Java线程和操作系统线程的联系
面试官:听前一个面试官说你Java并发这块掌握的不错,我们深入的交流一下; 我: 看了看面试官头部稀疏的结缔组织,已然觉得这场面试不简单,不过好在事前把安琪拉的博客看了个遍,有所准备,我回答说:咳咳,掌握的还算可以。 面试官:Java线程用过的吧? 我:用过。 面试官:那你给我讲讲Java线程和操作系统的? 我:啊!!! 剧情不应该这样的啊,开场不应该先是 synchronized 或者 volatile,再然后是线程池和AQS,怎么上来就整这玩意。 我:好的,那我分三段讲, 用户态的线程 内核态的线程 Java 线程源码 1. 用户态的线程 第一阶段: 其实早期的时候,操作系统是没有线程的概念,线程是后面加进来的,操作系统刚开始只有进程,操作系统分配资源的最小单位是进程,进程与进程之间相关隔离,每个进程有自己的内存空间,文件描述符,CPU调度以进程作为最小调度单元; 第二阶段: 初期的多线程,线程是在用户空间下实现的。 什么意思?我们都知道内存分用户空间和系统空间,系统空间是给操作系统使用的,用户空间是应用程序使用的,应用程序如果需要访问系统空间,需要进行系统调用,从用户态切换到内核态,这里详细可以参考我上一篇文章: [讲讲用户空间和内核空间] 那怎么在用户空间实现的多线程呢? 实际上是操作系统按进程维度来调度,操作系统是不去管你用户线程的切换的,应用程序自己在用户空间实现线程的创建、维护和调度。模型如下图: (编辑:威海站长网) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |