Hazelcast:具有多 CPU 台机器的集群上的线程数
Hazelcast: number of threads on a cluster with multi CPU machines
我使用 Hazelcast 创建了一个集群:它有一个主节点,将 Runnables 分布在其他 5 个节点中。我的问题是:Hazelcast ExecuterService
是否也在每个计算节点内并行执行计算?
我的意思是,如果我的每个计算节点有 4 个 CPU(或单个 CPU 上有 4 个核心),那么参与计算的线程总数是多少? 5(每个节点的线程)或 5*4=20(每个 CPU/core 的线程)?
您的 运行nable 发送给成员将 运行 每个成员一次,这意味着它将仅使用单线程。所以 5
好吧,我们可以手动解决:
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%。
我使用 Hazelcast 创建了一个集群:它有一个主节点,将 Runnables 分布在其他 5 个节点中。我的问题是:Hazelcast ExecuterService
是否也在每个计算节点内并行执行计算?
我的意思是,如果我的每个计算节点有 4 个 CPU(或单个 CPU 上有 4 个核心),那么参与计算的线程总数是多少? 5(每个节点的线程)或 5*4=20(每个 CPU/core 的线程)?
您的 运行nable 发送给成员将 运行 每个成员一次,这意味着它将仅使用单线程。所以 5
好吧,我们可以手动解决:
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%。