我使用Hazelcast创建了一个集群:它有一个主节点,它在其他5个节点之间传播Runnable。我的问题是: Hazelcast ExecuterService是否也并行地在每个计算节点内执行计算?
我的意思是,如果我的每个计算节点都有4个CPU(或单个CPU上的4个核心),那么参与计算的线程总数是多少?5(每个节点的线程)或5*4=20 (每个CPU/核心线程)?
发布于 2016-01-31 18:16:44
好吧,我们可以手工计算出来:
public class HazelcastTest {
@Test
public void test() {
HazelcastInstance instance = Hazelcast.newHazelcastInstance();
IExecutorService exec = instance.getExecutorService("exec");
for (int i = 0; i < 100; i++) {
exec.submit(new MyRunnable());
}
}
}
public class MyRunnable implements Runnable, Serializable {
@Override
public void run() {
long threadId = Thread.currentThread().getId();
System.err.println("threadId: " + threadId);
}
}结果是:
threadId: 48
threadId: 48
threadId: 46
threadId: 48
threadId: 46
threadId: 48
threadId: 46
threadId: 46
threadId: 54
threadId: 48
...etc...另一个证据是CPU监视器显示所有可用内核的100%负载。
发布于 2016-01-28 07:08:22
发送给成员的runnable将在每个成员中运行一次,这意味着它将只使用单个线程。SO5
https://stackoverflow.com/questions/35018905
复制相似问题