Mun*_*dhi 65 java parallel-processing multithreading
JVM在单个进程中运行,JVM中的线程共享属于该进程的堆.那么JVM如何利用多个内核来提供多个操作系统线程以实现高并发?
Emi*_*mil 27
您可以使用多个线程来使用多个核心.但是使用比机器中存在的核心数量更多的线程可能只是浪费资源.您可以使用availableProcessors()来获取核心数.
在Java 7中,有一个fork/join框架可以使用多个内核.
相关问题:
Vij*_*hew 18
如果操作系统通过可用处理器分配线程,Java将受益于多个内核.JVM本身并没有做任何特别的事情来让它的线程在多个核心上均匀地进行调度.要记住以下几点:
Runtime.getRuntime().availableProcessors()).不是更多,而不是更少.java.util.concurrent套餐提供的设施.Gra*_*ray 18
JVM在单个进程中运行,JVM中的线程共享属于该进程的堆.那么JVM如何利用多个内核来提供多个操作系统线程以实现高并发?
如果在多CPU机器上运行,Java将利用底层操作系统的线程来执行在不同CPU上执行代码的实际工作.当每个Java线程启动时,它会创建一个相关的OS线程和OS负责调度等.JVM的某些做一些管理和线程和Java语言结构,如跟踪volatile,synchronized,notify(),wait(),等所有影响运行OS线程的状态.
JVM在单个进程中运行,JVM中的线程共享属于该进程的堆.
JVM不必"在单个进程中运行",因为即使垃圾收集器和其他JVM代码也在不同的线程中运行,并且操作系统通常将这些不同的线程表示为不同的进程.例如,在Linux中,您在进程列表中看到的单个进程通常伪装成一堆不同的线程进程.即使您使用的是单核计算机,也是如此.
但是,你是正确的,他们都共享相同的堆空间.它们实际上共享相同的整个内存空间,这意味着代码,实习字符串,堆栈空间等.
那么JVM如何利用多个内核来提供多个操作系统线程以实现高并发?
线程从几个方面得到了性能提升.显然,直接并发通常会使程序运行得更快.能够同时执行多个CPU任务可以(但不总是)提高应用程序的吞吐量.您还可以将IO操作隔离到单个线程,这意味着当线程在IO上等待(读/写磁盘/网络等)时,其他线程可以正在运行.
但就内存而言,由于本地每CPU缓存内存,线程可以获得很多性能提升.当线程在CPU上运行时,CPU的本地高速内存高速缓存可帮助线程在本地隔离存储请求,而无需花时间读取或写入中央内存.这就是为什么volatile和synchronized调用包括内存同步结构的原因,因为当线程需要协调其工作或相互通信时,必须将高速缓存存储器刷新到主存储器或使其无效.
| 归档时间: | 
 | 
| 查看次数: | 79481 次 | 
| 最近记录: |