我使用Hazelcast创建了一个集群:它有一个主节点,可以在其他5个节点之间传播Runnables。我的问题是:Hazelcast ExecuterService
是否并行执行每个计算节点内的计算?
我的意思是,如果我的每个计算节点都有4个CPU(或单个CPU上有4个核心),那么参与计算的线程总数是多少? 5(每个节点的线程数)或5 * 4 = 20(每个CPU /核心的线程数)?
答案 0 :(得分:1)
发送给成员的runnable将为每个成员运行一次,这意味着它将只使用单个线程。所以5
答案 1 :(得分:0)
好吧,我们可以手动搞清楚:
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%负载。