java thread cpu

来源:互联网 发布:java web 商城 编辑:程序博客网 时间:2024/06/07 01:53

问题:一个java进程的多个线程能否在cpu的多core里执行?
观点一:
进程是CPU进行调度的单位,而JVM是进程级别的,于是一个jvm产生的java进程就只能跑在CPU的一个core上。
在我的印象里一直抱着这个想法,很多年。多年之前OS对于cpu执行进程是这么处理的,没有错。


观点二:
从操作系统来看,linux2.6以及windowsNT4.0之后都具备将多个线程放到cpu的多个core里执行的能力。也就意味着一个多线程的原生程序(直接和OS交互),在这种操作系统下是可以被多个core同时执行的,每个core的thread ID不一样。
        但是java 进程是通过jvm产生的,操作系统能识别java进程的线程吗?


回答是根据jvm的实现线程的方式,jvm会有两种实现方式:green thread、native thread 。 green thread 指 VM 自己管 thread, 而 native thread 表示該 VM 用的 thread 等同於 OS thread。其中如果是native theead的方式实现的话,是可以多个core执行同一进程的多个thread的。
多说一句:官方的jvm是native thread的实现方式微笑


个人看法,有不同意见欢迎留言讨论。





0 0
原创粉丝点击