Hazelcast:具有多CPU计算机的群集上的线程数

时间:2016-01-26 16:33:24

标签: java multithreading hazelcast

我使用Hazelcast创建了一个集群:它有一个主节点,可以在其他5个节点之间传播Runnables。我的问题是:Hazelcast ExecuterService是否并行执行每个计算节点内的计算?

我的意思是,如果我的每个计算节点都有4个CPU(或单个CPU上有4个核心),那么参与计算的线程总数是多少? 5(每个节点的线程数)或5 * 4 = 20(每个CPU /核心的线程数)?

2 个答案:

答案 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%负载。