一、双核 CPU 的情况
验证方式:
| 在作业主程序中的 rdd.foreachPartition()中加入如下代码:
| 使当前线程睡眠1000ms,前后都打印当前线程信息
| 数据自行准备,大量即可
rdd.foreachPartition(partition => {
println("[partition] Current thread " + Thread.currentThread().getId
+ " : " +Thread.currentThread().getName)
Thread.sleep(1000)
println("[partition] Sleep 1s Current thread " + Thread.currentThread().getId
+ " : " +Thread.currentThread().getName)
}
经验证:
| 有两个线程(288和59)同时交替运行;
| 如下第一张图为作业最开始运行时的情况,只有2个线程,288在完成睡眠前,进入了59线程;
| 第二张图为一段时间后,288线程消失了,剩下708和59线程,依然只有2个;
结论:
| 1)能开启的最大线程数取决于分配的CPU核数;
| 2)每个partition 都将开启一个task,每个task由一个线程完成;
| 3)每个线程将完成多个task任务。
二、单核 CPU 的情况
此时只有一个线程执行所有task任务,不存在并发问题