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内核线程的映射关系相关推荐

  1. ARM Linux (S3C6410架构/2.6.35内核)的内存映射(三)

    这里记录一下Linux内核做二级内存映射的过程,以中断向量表的映射过程为例. 在S3C6410架构下,Linux采用的是粗粒度小页内存管理方式,即内存段(section)的大小为1M,而页(page) ...

  2. Linux篇.配置IP地址与主机名的映射关系

    作用:方便SSH的调用 //进入编辑模式 vi /etc/hosts //添加内容 192.168.234.11 bigdata11 192.168.234.12 bigdata12 192.168. ...

  3. CentOS(Linux)配置主机名和IP地址的映射关系

    1.修改主机名 #查看主机名 hostname #修改主机名 hostname yuanke01 2.配置主机名和IP地址的映射关系 #打开/etc/hostvim /etc/host#添加主机名和I ...

  4. Java线程与Linux内核线程的映射关系

    http://blog.sina.com.cn/s/blog_605f5b4f010198b5.html Linux从内核2.6開始使用NPTL (Native POSIX Thread Librar ...

  5. linux 线程--内核线程、用户线程实现方法

    Linux上进程分3种,内核线程(或者叫核心进程).用户进程.用户线程 内核线程拥有 进程描述符.PID.进程正文段.核心堆栈 当和用户进程拥有相同的static_prio 时,内核线程有机会得到更多 ...

  6. linux内核线程创建销毁机制

    这个话题乍一听貌似比较大,其实线程创建本身就是一件很平常的事情. 下面将要介绍的是,新版linux中创建内核线程的机制做了一些变化(其实本质没变,最终还是调用do_fork()来实现),和控制线程的时 ...

  7. 【Linux 内核】进程管理 ( 内核线程概念 | 内核线程、普通进程、用户线程 | 内核线程与普通进程区别 | 内核线程主要用途 | 内核线程创建函数 kernel_thread 源码 )

    文章目录 一.内核线程概念 二.内核线程.普通进程.用户线程 三.内核线程.普通进程区别 四.内核线程主要用途 五.内核线程创建函数 kernel_thread 源码 一.内核线程概念 直接 由 Li ...

  8. Linux内核线程kernel thread详解--Linux进程的管理与调度(十)【转】

    转自:https://blog.csdn.net/gatieme/article/details/51589205 版权声明:本文为博主原创文章 && 转载请著名出处 @ http:/ ...

  9. Linux内核线程kernel thread详解--Linux进程的管理与调度

    内核线程 为什么需要内核线程 Linux内核可以看作一个服务进程(管理软硬件资源,响应用户进程的种种合理以及不合理的请求). 内核需要多个执行流并行,为了防止可能的阻塞,支持多线程是必要的. 内核线程 ...

最新文章

  1. “-bash: !”: event not found、echo sudo permission denied
  2. JavaScript事件对象
  3. 你的云计算到底有多安全?
  4. 1114 Family Property (25 分)【难度: 中/ 知识点: 并查集】
  5. VHDL的数据对象(学习笔记1)
  6. java 短信猫发送短信的方法
  7. python数据科学实战_Python数据科学实战第三讲作业HW4
  8. 云原生生态周报 Vol. 2
  9. sdut 区间覆盖问题
  10. spark executor task执行
  11. Ubuntu使用谷歌浏览器登录账号时崩溃
  12. Linux vlan间路由配置,VLAN间路由
  13. 如何修改 WordPress 的用户默认头像?
  14. php ip 访问频繁,php刷新过于频繁自动加ip黑名单
  15. 计算机蓝屏无法启动不了系统怎么办,电脑开机蓝屏死机,无法进入系统怎么办?...
  16. Linux 云服务器aircrack-ng后台跑包并用邮件发送结果
  17. godot引擎学习7
  18. 2018/02/12
  19. PAT : 团体程序设计天梯赛-练习集 L3 答案即比赛技巧
  20. 黑马头条从登陆页到个人中心页

热门文章

  1. 《JAVA与模式》之装饰模式
  2. Java泛型学习资料小汇
  3. Tomcat性能调优-JVM监控与调优
  4. Git笔记(一)——[commit, checkout]
  5. 漫画:优秀的程序员具备哪些属性?
  6. Effective Java读书笔记一:并发
  7. 沈向洋谈做研究的那些事儿
  8. 机器学习经典书籍小结
  9. 人工智能:第九章 Agent (艾真体)
  10. 数字图像处理:第十三章 图象复原