最近在论坛里看到有人讨论多核,那么,
多核和多线程有啥关联呢?
我做了个实验,
实现环境:
AMD Athlon(tm) 64 X2 Dual Core
Ubuntu i386/内核: linux 2.6.32-25
OpenJDK6
1.Main函数里启动一个线程时候, 一个CPU 100%
2.Main函数里启动两个线程的时候,2个CPU 100%
3.Main 函数里1个线程,但同时启动2次,和效果2类似
结论:系统会自动调配CPU,而且发现系统会自动使用 2个CPU中利用率较小的CPU。
即,多核CPU运行多线程程序,如果编程时候没有指定CPU信息,OS会负责CPU内核的调度和管理,不需要考虑OS的多核CPU调度的。但是如果自己想
均衡多核CPU的负载,在创建线程的时候,可以指定线程的CPU亲和性(CPU Affinity),使用如 linux c api:sched_setaffinity,windows c api:SetProcessAffinityMask、SetThreadAffinityMask函数,可以实现干预OS对线程的调度,均衡CPU负载。
附:
在指定cpu的核心上执行线程(c/c++): http://www.cppblog.com/Khan/archive/2009/12/29/104384.html
那么JAVA呢?
In the JRockit JVM Management API you can at least suggest the process affinity. Not sure if it is respected on the OS you're running. See http://e-docs.bea.com/jrockit/releases/R27/javadoc/manapi/docs/com/bea/jvm/JVM.html#suggestProcessAffinity(java.util.Collection) for more information.
JVM jvm = JVMFactory.getJVM();
List cpus = new ArrayList();
for(Iterator it = JVMFactory.getJVM().getProcessAffinity().iterator();it.hasNext();)
{
CPU cpu = (CPU) it.next();
jvm.suggestProcessAffinity(cpus);
}
You can find JRockit here.
http://www.oracle.com/technology/software/products/jrockit/index.html
===================================
I used taskset on my 4 cpu machine, and by using:
taskset -pc 0 java net.tilialacus.BusyThreads
I gbound all threads to cpu 0. (BusyThreads just runs a few threads with
while(true);
However, if I started the process first, then I have to bind all threads
manually to the CPU. Using ps -eLf I could list all threads (10 or so)
and I could bind each of them separately. I didn't find a way for
taskset to climb the process/thread tree automatically.
分享到:
相关推荐
同时,操作系统和应用程序的优化也至关重要,比如Windows的进程调度机制,以及编程语言如Java、C++等提供的并发编程库,都致力于更好地利用多核多线程的优势。 总结来说,英特尔的多核多线程技术是提升计算机性能的...
综上所述,精通lambda表达式和Java多核编程需要深入理解Java 8及之后版本中引入的新特性,掌握流API的使用,合理选择和使用并行流,并且能够应用并发工具包来处理多线程编程中的问题。同时,还需要具备对Java内存...
标题和描述中提到的“多核多线程下java设计模式性能提升.pdf”,说明文章旨在讨论在现代大型系统中广泛使用的多核多线程环境下,如何通过改进Java设计模式来提升系统性能。这一主题对于Java开发者尤其重要,因为随着...
通过以上分析,我们可以看到,在Java中合理利用单线程或多线程以及`synchronized`关键字能够有效地提高程序的性能和响应能力,同时也需要注意其可能带来的复杂性和资源消耗问题。开发者应根据具体的应用场景和需求来...
Java 的多线程编程可以提高程序的执行效率和响应速度,但同时也需要程序员注意线程间的同步和安全问题。 并行计算 并行计算是一种计算模式,通过将计算任务分配到多个处理器或核心上,以提高计算速度和效率。并行...
这在处理复杂的多线程和多任务场景时非常有用。 7. **并发工具类的使用**:包括`ExecutorService`、`CountDownLatch`、`CyclicBarrier`和`Semaphore`等,这些工具可以帮助我们更有效地管理线程和同步,以实现高效的...
此外,文档可能还会探讨线程间的通信、同步问题,如死锁、竞态条件等,以及如何优化多线程和多核程序以获得最佳性能。 了解并掌握多线程、多核编程和OpenMP,对于开发高效、响应快速的应用程序至关重要,尤其是在...
Java多线程是Java编程中的重要概念,尤其在如今的多核处理器环境下,理解并熟练掌握多线程技术对于提高程序性能和响应速度至关重要。本资料详细讲解了Java多线程的原理,并提供了丰富的实战代码,非常适合Java初学者...
在现代计算机系统中,多核处理器已经成为主流,Java作为一款广泛应用的编程语言,其在多核多线程环境下的性能优化至关重要。Java设计模式在这样的背景下扮演着关键角色,能够帮助开发者有效地利用多核资源,提升软件...
Java中的单线程和多线程是编程中的关键概念,特别是在服务器端开发中。了解它们的原理和应用对于构建高效、可扩展的客户端-服务器应用至关重要。以下是对这些概念的详细解析。 首先,我们来谈谈单线程。在Java中,...
Java多线程文件传输是Java编程中一个重要的实践领域,特别是在大数据处理、网络通信和分布式系统中。在Java中,多线程可以提高程序的执行效率,尤其在处理并发任务时,如大文件的上传、下载和传输。下面将详细探讨...
在Java编程中,多线程并发是提升程序执行效率、充分利用多核处理器资源的重要手段。本文将基于"java 多线程并发实例"这个主题,深入探讨Java中的多线程并发概念及其应用。 首先,我们要了解Java中的线程。线程是...
总之,Java的多线程和并发编程是一个复杂而重要的主题,它涉及到操作系统原理、JVM行为、线程管理、同步机制等多个方面,熟练掌握这些知识对于开发高效、可靠的Java应用程序至关重要。通过理解线程的工作原理和使用...
在Java中,实现多线程主要通过两种方式:继承Thread类和实现Runnable接口。在这个端口扫描程序中,通常会采用实现Runnable接口的方法,因为这样可以避免单继承的限制,同时可以通过Thread类的构造函数创建新的线程...
多核多线程处理器的任务调度技术是现代计算机系统...综上所述,多核多线程处理器的任务调度技术是提升计算效率的关键,深入研究其原理、特点和优化策略,对于推动计算机技术的发展和实际应用的性能提升具有重要意义。
在Java编程领域,多线程是一项至关重要的技术,它能够充分利用多核处理器的计算能力,提高应用程序的响应速度和并发性能。《Java多线程编程实战指南》这本书深入浅出地讲解了Java多线程的核心概念和实战技巧,分为...
Java多线程编程实战指南...本书以基本概念、原理与方法为主线,辅以丰富的实战案例和生活化实例,并从Java虚拟机、操作系统和硬件多个层次与角度出发,循序渐进、系统地介绍Java平台下的多线程编程核心技术及相关工具。
最后,Java并发库还包含了很多其他有用的工具,如Semaphore(信号量)用于控制同时访问特定资源的线程数量,CyclicBarrier(循环屏障)和CountDownLatch(计数器门锁)用于多线程间的协作,以及Lock接口及其实现如...
总的来说,RMI在多核多线程环境中的应用,特别是在XLR处理器驱动的网络加速器中,展示了强大的并发处理能力和高效的资源利用。这种技术对于处理大量网络流量和复杂计算任务的系统来说是至关重要的,能够显著提升服务...