本文为 Spark 2.0 源码分析笔记,由于源码只包含 standalone 模式下完整的 executor 相关代码,所以本文主要针对 standalone 模式下的 executor 模块,文中内容若不特意说明均为...,它在接收到 driver 回应的 RegisteredExecutor 消息后,会创建一个 Executor。...至此,Executor 创建完毕(Executor 在 Mesos、YARN、Standalone 模式下都是相同的,不同的只是资源的分配方式) driver 端调用 CoarseGrainedSchedulerBackend.DriverEndpoint...进程退出后,向 worker 发送 ExecutorStateChanged(Executor 状态变更为 EXITED) 消息通知其 Executor 退出 其中,在创建、启动或等待 CoarseGrainedExecutorBackend...方法来结束 CoarseGrainedExecutorBackend 进程 至此,我们完成了对 executor 启动过程的分析。
引入Executor 创建Executor 创建固定大小的线程Executor 引入Executor 我们在开发Java多线程程序的时候,往往会创建很多个Runnable对象,然后创建对应的Thread...这套新的框架就是执行器框架(Executor Framework),围绕着Executor接口和它的自接口的ExecutorService,以及实现这两个接口的ThreadPoolExecutor类。...使用Executor,只要将Runnable对象,直接丢给执行器就可以了。Executor会自己创建线程,来负责这些Runnable对象任务的执行。...创建Executor 使用Executor的第一步就是创建一个线程池对象,java提供了Executors的工厂类,可以帮我们创建不同的线程池对象 ?...这个Executor会有一个最大的线程最大数,如果发送超过这个任务数的任务给Executor,执行器不会再创建额外的线程,剩下的任务将被阻塞直到Executor有足够的空闲的线程可用。
任务执行器(Executor)是一个接口,位于java.util.concurrent包下,它的作用主要是为我们提供任务与执行机制(包括线程使用和调度细节)之间的解耦。...通过Executor就能为任务提供不同的执行机制。执行器的实现方式各种各样,常见的包括同步执行器、一对一执行器、线程池执行器、串行执行器等等。...如下演示代码中,DirectExecutor继承了Executor,它的execute方法直接调用了Runnable的run方法。...05 总结 Executor只是一个接口,它提供了任务和执行的解耦机制。我们分析了几种常见执行器的实现,实际工程上可以根据自己实际情况来设计实现任务执行器。
JavaSE5 的 java.util.concurrent 包中的执行器( Executor ) 管理Thread对象。从而简化了并发编程。...Executor在客户端和任务执行之间提供了一个间接层;与客户端直接执行任务不同,这个中介对象将执行任务。 Executor允许你管理异步任务的执行,而无须显式地管理线程的生命周期。...Executor在JavaSE5/6中是启动任务的优选方法 ---节选《Java编程思想》 CachedThreadPool()创建 ExecutorService newCachedThreadPool...exec.execute(new LiftOff()); } exec.shutdown(); // 对shutdown的调用可以防止新任务提交给Executor...,运行完Executor中所有任务后会尽快退出 System.out.println("主线程"); } } class LiftOff implements Runnable
0 Executor由来 Java1.4之前已提供Runnable接口、Thread类、Timer类和synchronize关键字,已足以完成各种各样的多线程编程任务,为什么还要提供执行者这样的概念?...从JDK5开始,把工作单元与执行机制分离开来: 工作单元包括Runnable和Callable 执行机制由Executor框架提供 1 线程执行者 这个功能主要由三个接口和类提供,分别是: Executor...包括被执行任务需要实现的接口:Runnable接口或Callable接口。 任务的执行。包括任务执行机制的核心接口Executor,以及继承自Executor的ExecutorService接口。...包括接口Future和实现Future接口的FutureTask类。 Executor框架包含的主要的类与接口如图 下面是这些类和接口的简介。...Executor是一个接口,它是Executor框架的基础,它将任务的提交与任务的执行分离开来。 ThreadPoolExecutor是线程池的核心实现类,用来执行被提交的任务。
将所有任务放在单个线程中串行执行:糟糕的响应时间和吞吐量 为每个任务分配一个线程:资源管理的复杂性 Executor框架: Public interface Executor{ void execute...类似与Timer 通过使用Executor,可以实现各种调优、管理、监视、记录日志、错误报告和其他功能。 Executor的生命周期: 如何关闭Executor?...如果不关闭Executor,那么JVM将永远不会结束(JVM在所有非守护线程结束后太会退出)。...平缓关闭模式:完成所有已启动的任务,并且不再接收新任务 暴力关闭模式:直接关掉电源 为了解决执行服务的生命周期问题,Executor扩展了ExecutorService接口,添加了一些用于生命周期管理的方法...CompletionService: Executor 与 BlockingQueue 完成任务(CompletionService):如果向Executor提交了一组计算任务,并希望在计算完成后获得结果
Executor框架的结构与成员 Executor框架的结构 任务。包括被执行任务需要实现的接口:Runnable接口 或 Callable接口。 任务的执行。...包括任务执行机制的核心接口Executor,以及继承自Executor的ExecutorService接口。...Executor框架包含的主要的类与接口如下图所示: 下面是这些类和接口的简介: Executor是一个接口,它是Executor框架的基础,它将任务的提交与任务的执行分离开来。...Executor`框架的使用示意图如下: 主线程首先要创建实现Runnable或者Callable接口的任务对象。...Executor框架的成员 这里将介绍Executor框架的主要成员: ThreadPoolExecutor ScheduledThreadPoolExecutor Future接口 Runnable接口
前言 在说Executor前, 先来看一下线程创建的几种方式: 1、继承Thread类创建线程 2、 实现Runable接口创建线程 3、使用Callable和Future 创建线程 4、使用Executor...而Executor 了为了解决这些类似的问题而实现的。...最上层的Executor :提供了可以接受Runable对象的executor方法。 ExecutorService:主要提供了可返回Future对象的方法。...ScheduledExecutorService:提供可定时调度任务的接口 ThreadPoolExecutor:这个就是我们最常使用的线程池啦 ScheduledThreadPoolExecutor...Executor的两级调度模型 以上是使用的内容,下面来看看Executor的两级调度模型: ?
图1 Executor是个接口,具体实现是在BaseExecutor和4个子类中。...handler.batch(stmt); return BATCH_UPDATE_RETURN_VALUE; } ... 2.ReuseExecutor ReuseExecutor与其它executor...CachingExecutor有点特殊,使用了Delete模式,此外用到了Cache,如下List-3 List-3 public class CachingExecutor implements Executor...(); public CachingExecutor(Executor delegate) { this.delegate = delegate; delegate.setExecutorWrapper...在没有特殊设置的情况下,mybatis中,如下List-6,默认使用的executor是SimpleExecutor,StatementHandler是RoutingStatementHandler,内部委托给
浮现于脑海中的一个基本的问题是,当我们创建 java.lang.Thread 的对象或调用实现了 Runnable/Callable 接口来达到的程序的并行性时,为什么需要线程池?...对于 Future.get()方法返回的结果,一个重要的事情是,只有提交的任务实现了java.util.concurrent.Callable接口时才返回 Future。...如果任务实现了Runnable接口,那么一旦任务完成,对 .get() 方法的调用将返回 null。...; } } Task 类实现 Callable 接口并有一个 String 类型作为返回值的方法。 这个方法也可以抛出 Exception。...我们也可以通过实现 Runnable 接口来创建同样的任务: public class Task implements Runnable{ private String message;
在实际的开发中,我们用的最多的线程框架其实不是线程池而是Executor。它为我们创建一个线程池提供了更方便的方法。...Executor是一个接口,它是Executor框架的基础,它使任务的提交与任务的执行分离。底层仍然使用的是线程池。...通过Executor框架的工具类Executors,可以创建3种类型的线程池它们分别是:FixedThreadPool、SingleThreadExecutor、CachedThreadPool。
Executor源码的最主要代码是TaskRunner,TaskRunner是一个多线程,首先看其runner方法: //对序列化的task数据,进行反序列化 Executor.taskDeserializationProps.set...taskDescription.addedFiles, taskDescription.addedJars) 1、CoarseGrainedExecutorBackend worker中为application启动的executor...s"Cannot register with driver: $driverUrl", e, notifyDriver = false) }(ThreadUtils.sameThread) } 2、Executor...context, taskDescription) runningTasks.put(taskDescription.taskId, tr) threadPool.execute(tr) } 在Executor
队列中元素需要实现Comparable接口或初始化队列时传入一个Comparator对象。...我们可以通过实现ThreadFactory接口,来定制线程工厂。...---- Executor生命周期 由于Executor以异步方式来执行任务,因此在任意时刻,之前提交的任务的状态是无法立刻得到的。...为了解决执行任务的生命周期问题,ExecutorService扩展了Executor接口,添加了一些生命周期管理的方法。...Executor是异步执行任务,这是通过队列来实现的。
namespace DB { /// Interface to run task asynchronously with possibility to wait for execution. class Executor...{ public: virtual ~Executor() = default; virtual std::future execute(std::function<void...task synchronously in case when disk doesn't support async operations. class SyncExecutor : public Executor...get_future(); } }; /// Runs tasks asynchronously using thread pool. class AsyncExecutor : public Executor
一、Executor: 是一个接口 用于执行提交的任务 解耦任务提交和执行(线程的创建及调度) Executor的实现可以根据实际需求延展不同的逻辑: 1、对于提交的任务同步或者异步执行...,如下同步执行: class ThreadPerTaskExecutor implements Executor { public void execute(Runnable r) {...new Thread(r).start(); } 2、另起线程执行任务,如下: class ThreadPerTaskExecutor implements Executor { public...{ final Queue tasks = new ArrayDeque(); final Executor executor; Runnable...active; SerialExecutor(Executor executor) { this.executor = executor; } public synchronized
代表一个要执行的任务,执行方法call,执行完成返回一个值 public interface Callable { V call() throws Exception; } executor...executor为执行器,通过执行器来执行任务并得到预执行结果对象future public interface Executor { Future execute...} SynchronizedExecutor 使用synchronized关键字实现的执行器 public class SynchronizedExecutor implements Executor
The Docker executor GitLab Runner can use Docker to run jobs on user provided images....This is possible with the use of Docker executor...., supported Windows versions, and configuring a Windows Docker executor....docker-windows executor can be run only using GitLab Runner running on Windows....This executor is no longer maintained and will be removed in the near future.
为了更好的控制多线程 jdk提供了一套线程框架Executor 帮助开发人员有效地进行线程控制 他们都在java.util.concurrent包中 是jdk并发包的核心 一个重要的类Executors...public MyRejected(){ } @Override public void rejectedExecution(Runnable r, ThreadPoolExecutor executor
The Shell executor The Shell executor is a simple executor that you use to execute builds locally on...installed on the machine, so ensure Git LFS is up-to-date when GitLab Runner will run using the shell executor...[[runners]] name = "shell executor runner" executor = "shell" shell = "powershell" ......Terminating and killing processes The shell executor starts the script for each job in a new process.
Saturn Executor部署 Executor是作业的执行器。这一节将介绍如何将调试好的作业部署到Executor上面运行。关于如何开发调试作业,见“入门”一章。.../bin: 存放executor的启动脚本(saturn-executor.sh) /bin: 存放executor的启动脚本(saturn-executor.sh) /demo_script: 一些演示用的脚本...(4个php脚本) /lib: 存放executor的依赖及第三方jar包 /logs: 已经不作使用,将被废弃 saturn-executor.jar:executor启动的主jar 2.3 作业部署...2.4 启动executor cd saturn-executor-{version}/bin #修改权限 chmod a+x saturn-executor.sh #启动 ....如果启动失败,根据console提示的路径查看saturn-executor.log。 2.5 单台物理机启动多个executor 建议在一台物理机启动一个executor。
领取专属 10元无门槛券
手把手带您无忧上云