java线程和linux线程,Java线程与Linux内核线程的映射关系
Linux从内核2.6开始使用NPTL (Native POSIX Thread Library)支持,但这时线程本质上仍是轻量级进程(LWP)。
Java里的线程是由JVM来管理的,它如何对应到操做系统的线程是由JVM的实现来肯定的。Linux 2.6上的HotSpot使用了NPTL机制,JVM线程跟内核轻量级进程有一一对应的关系。线程的调度彻底交给了操做系统内核,固然jvm还保留一些策略足以影响到其内部的线程调度,举个例子,在linux下,只要一个Thread.run就会调用一个fork产生一个线程。java
Java线程在Windows及Linux平台上的实现方式,如今看来,是内核线程的实现方式。这种方式实现的线程,是直接由操做系统内核支持的——由内核完成线程切换,内核经过操纵调度器(Thread Scheduler)实现线程调度,并将线程任务反映到各个处理器上。内核线程是内核的一个分身。程序通常不直接使用该内核线程,而是使用其高级接口,即轻量级进程(LWP),也即线程。这看起来可能很拗口。看图:linux
(说明:KLT即内核线程Kernel Thread,是“内核分身”。每个KLT对应到进程P中的某一个轻量级进程LWP(也即线程),期间要通过用户态、内核态的切换,并在Thread Scheduler 下反应处处理器CPU上。)jvm
这种线程实现的方式也有它的缺陷:在程序面上使用内核线程,必然在操做系统上屡次来回切换用户态及内核态;另外,由于是一对一的线程模型,LWP的支持数是有限的。工具
Runtime.getRuntime().availableProcessors();性能
因此最小线程数量即时cpu内核数量。若是全部的任务都是计算密集型的,这个最小线程数量就是咱们须要的线程数。开辟更多的线程只会影响程序的性能,由于线程之间的切换工做,会消耗额外的资源。若是任务是IO密集型的任务,咱们能够开辟更多的线程执行任务。当一个任务执行IO操做的时候,线程将会被阻塞,处理器马上会切换到另一个合适的线程去执行。若是咱们只拥有与内核数量同样多的线程,即便咱们有任务要执行,他们也不能执行,由于处理器没有能够用来调度的线程。spa
若是线程有50%的时间被阻塞,线程的数量就应该是内核数量的2倍。若是更少的比例被阻塞,那么它们就是计算密集型的,则须要开辟较少的线程。若是有更多的时间被阻塞,那么就是IO密集型的程序,则能够开辟更多的线程。因而咱们能够获得下面的线程数量计算公式:操作系统
线程数量=内核数量 / (1 - 阻塞率)线程
咱们能够经过相应的分析工具或者java的management包来获得阻塞率的数值。接口
java线程和linux线程,Java线程与Linux内核线程的映射关系相关推荐
- ARM Linux (S3C6410架构/2.6.35内核)的内存映射(三)
这里记录一下Linux内核做二级内存映射的过程,以中断向量表的映射过程为例. 在S3C6410架构下,Linux采用的是粗粒度小页内存管理方式,即内存段(section)的大小为1M,而页(page) ...
- Linux篇.配置IP地址与主机名的映射关系
作用:方便SSH的调用 //进入编辑模式 vi /etc/hosts //添加内容 192.168.234.11 bigdata11 192.168.234.12 bigdata12 192.168. ...
- CentOS(Linux)配置主机名和IP地址的映射关系
1.修改主机名 #查看主机名 hostname #修改主机名 hostname yuanke01 2.配置主机名和IP地址的映射关系 #打开/etc/hostvim /etc/host#添加主机名和I ...
- Java线程与Linux内核线程的映射关系
http://blog.sina.com.cn/s/blog_605f5b4f010198b5.html Linux从内核2.6開始使用NPTL (Native POSIX Thread Librar ...
- linux 线程--内核线程、用户线程实现方法
Linux上进程分3种,内核线程(或者叫核心进程).用户进程.用户线程 内核线程拥有 进程描述符.PID.进程正文段.核心堆栈 当和用户进程拥有相同的static_prio 时,内核线程有机会得到更多 ...
- linux内核线程创建销毁机制
这个话题乍一听貌似比较大,其实线程创建本身就是一件很平常的事情. 下面将要介绍的是,新版linux中创建内核线程的机制做了一些变化(其实本质没变,最终还是调用do_fork()来实现),和控制线程的时 ...
- 【Linux 内核】进程管理 ( 内核线程概念 | 内核线程、普通进程、用户线程 | 内核线程与普通进程区别 | 内核线程主要用途 | 内核线程创建函数 kernel_thread 源码 )
文章目录 一.内核线程概念 二.内核线程.普通进程.用户线程 三.内核线程.普通进程区别 四.内核线程主要用途 五.内核线程创建函数 kernel_thread 源码 一.内核线程概念 直接 由 Li ...
- Linux内核线程kernel thread详解--Linux进程的管理与调度(十)【转】
转自:https://blog.csdn.net/gatieme/article/details/51589205 版权声明:本文为博主原创文章 && 转载请著名出处 @ http:/ ...
- Linux内核线程kernel thread详解--Linux进程的管理与调度
内核线程 为什么需要内核线程 Linux内核可以看作一个服务进程(管理软硬件资源,响应用户进程的种种合理以及不合理的请求). 内核需要多个执行流并行,为了防止可能的阻塞,支持多线程是必要的. 内核线程 ...
最新文章
- “-bash: !”: event not found、echo sudo permission denied
- JavaScript事件对象
- 你的云计算到底有多安全?
- 1114 Family Property (25 分)【难度: 中/ 知识点: 并查集】
- VHDL的数据对象(学习笔记1)
- java 短信猫发送短信的方法
- python数据科学实战_Python数据科学实战第三讲作业HW4
- 云原生生态周报 Vol. 2
- sdut 区间覆盖问题
- spark executor task执行
- Ubuntu使用谷歌浏览器登录账号时崩溃
- Linux vlan间路由配置,VLAN间路由
- 如何修改 WordPress 的用户默认头像?
- php ip 访问频繁,php刷新过于频繁自动加ip黑名单
- 计算机蓝屏无法启动不了系统怎么办,电脑开机蓝屏死机,无法进入系统怎么办?...
- Linux 云服务器aircrack-ng后台跑包并用邮件发送结果
- godot引擎学习7
- 2018/02/12
- PAT : 团体程序设计天梯赛-练习集 L3 答案即比赛技巧
- 黑马头条从登陆页到个人中心页