多进程,多线程以及spark的executor等概念

在spark中,

  • worker就是集群里可执行的机器,一个worker可以有多个executor。
  • 一个executor就是CPU,一个CPU可以有多个核。
  • 一个core(核)对应一个线程,也就是一个task,一个核同时只能执行一个task。注意,这个的core不是指物理核,是虚拟核。

关于CPU和核:

  • CPU有单核CPU和多核CPU。
  • 一般来讲几个物理核就是几个线程,但是通过超线程技术,一个物理核可以分成多个虚拟核,从而使得一个核可以有多个线程。但是,一个核同时只能执行一个线程。
  • 并发:多个线程在单个核心运行,同一时间一个线程运行,系统不停切换线程,看起来像同时运行,实际上是线程不停切换。
  • 并行:多个线程在多个核心运行,线程同时运行。
  • 串行和并发的区别:虽然都是同时运行一个线程,但是串行就只能一个一个线程串行处理,就是一个结束了再起另一个线程,而并发本质上还是可以处理多个线程。

选择多个单核CPU和单个多核CPU?

  • 多核CPU共享数据是通过CPU内部的总线,多个单核CPU共享数据是通过主板的总线,通信开销更大。
  • 多核CPU只需要一套芯片组,一套存储,而多个单核CPU,每一个CPU都需要有较为独立的电路支持,有自己的Cache。如果要多个耗内存的大型程序,还是需要多个单核CPU。

多进程和多线程:

  • 进程是分配资源(包括了CPU、内存、磁盘IO等)的最小单位,线程是CPU分配和调度的单位。一个进程是由多个线程组成的。其实我理解无论线程和进程都是要分配资源的,但是进程涉及的资源分配更多,而线程只涉及CPU里的资源分配,进程更加宏观,线程更加精细。
  • 同一个进程内的多线程是共享资源的,因此数据共享非常方便,占用内存少,切换速度快,CPU利用率高,但是缺点就是编程较为复杂,涉及到锁之类的,同时一个线程挂导致整个进程挂,鲁棒性比较差。
  • 进程之间的通信是通过管道,信号之类的,数据要共享的话涉及到共享内存,比较复杂,同时占用内存多,切换复杂,CPU利用率低,但优点就是变成简单,且进程间不受影响,鲁棒性高。

image-20200605145655675


多进程,多线程以及spark的executor等概念
http://yoursite.com/2018/11/07/大数据/Spark/多进程,多线程以及spark的executor等概念/
作者
Wei Lyu
发布于
2018年11月7日
许可协议