JVM线程与Linux内核线程的映射(关系)

Python015

JVM线程与Linux内核线程的映射(关系),第1张

Linux从内核2.6开始使用NPTL(Native POSIX Thread Library)支持,但这时线程本质上还轻量级进程。 Native POSIX Thread Library(NPTL)是Linux内核中实践POSIX Threads标准的库。POSIX线程(英语:POSIX Threads,常被缩写为Pthreads)是POSIX的线程标准,定义了创建和操纵线程的一套API。实现POSIX 线程标准的库常被称作Pthreads

Pthreads定义了一套C语言的类型、函数与常量,它以pthread.h头文件和一个线程库实现。

Pthreads API中大致共有100个函数调用,全都以"pthread_"开头,并可以分为四类:

线程管理,例如创建线程,等待(join)线程,查询线程状态等。

互斥锁(Mutex):创建、摧毁、锁定、解锁、设置属性等操作

条件变量(Condition Variable):创建、摧毁、等待、通知、设置与查询属性等操作

使用了互斥锁的线程间的同步管理

Java里的线程是由JVM来管理的,它如何对应到操作系统的线程是由JVM的实现来确定的。Linux 2.6上的HotSpot使用了NPTL机制, JVM线程跟内核轻量级进程有一一对应的关系 。线程的调度完全交给了操作系统内核,当然jvm还保留一些策略足以影响到其内部的线程调度,举个例子,在linux下,只要一个Thread.run就会调用一个fork产生一个线程。

Java线程在Windows及Linux平台上的实现方式,现在看来,是内核线程的实现方式。这种方式实现的线程,是直接由操作系统内核支持的——由内核完成线程切换,内核通过操纵调度器(Thread Scheduler)实现线程调度,并将线程任务反映到各个处理器上。内核线程是内核的一个分身。程序一般不直接使用该内核线程,而是使用其高级接口,即轻量级进程

创建用户级线程

CPU资源时,按照以下步骤进行查找:

(一):通过【 top -p 12377 -H】 查看java进程的有哪些线程的运行情况;

和通过【jstack 12377 >stack.log】生成Java线程的dump详细信息;

先用top命令找出占用资源厉害的java进程id,如图:# top

如上图所示,java的进程id为’52554′,接下来用top命令单独对这个进程中的所有线程作监视:

1top -p 52554 -H

# top视图里面里面可以通过快捷键依次b ,x高亮显示top的列找出需要的线程,默认CPU排序,Sh

你这个特征数据采集应该是属于计算密集型的使用cpu。在cpu上,所谓的并发执行数量是取决于你的cpu核数的,比如,你的cpu是8核的,那么同一时刻最多只有8个线程在运行,其它的都会处理于等待状态。至于为什么会有23个线程在跑,有可能是你使用了第三方的框架,它们初始化了线程,java启动的时候也会有线程数比如垃圾回收的线程。