精华内容
下载资源
问答
  • Executor

    2020-12-13 16:30:46
    Executor 在 Java 类库中,任务执行的主要抽象不是 Thread,而是 Executor。虽然 Executor 只是一个简单的接口,但却为 JDK 中灵活且强大的异步任务执行框架提供了基础。 异步任务执行框架 使用 Runnable 表示任务,...

    Executor

    在 Java 类库中,任务执行的主要抽象不是 Thread,而是 Executor。虽然 Executor 只是一个简单的接口,但却为 JDK 中灵活且强大的异步任务执行框架提供了基础。

    异步任务执行框架

    使用 Runnable 表示任务,能支持多种任务执行策略,且提供了一种标准方法将任务的提交和执行解耦。此外,Executor 的实现还提供了对生命周期的支持,以及统计信息收集、应用程序管理机制和性能监视等机制。

    Executor 基于生产者-消费者模式,提交任务的操作相当于生产者,执行任务的线程则相当于消费者。要用 Java 实现一个生产者-消费者的设计,最简单可靠的方式就是使用 Executor。

    Executor 的优势:

    通过将任务的提交和执行解耦开来,从而可以很方便的为某种类型的任务指定和修改执行策略。所谓任务的执行策略包括:

    1. 在什么线程中执行任务?
    2. 任务按照什么顺序执行(FIFO、LIFO、优先级)?
    3. 有多少个任务可以并发执行?
    4. 在队列中有多少个任务在等待执行?
    5. 如果系统因为过载而需要拒绝一个任务,应该选择哪一个任务?另外,如何通知应用程序有任务被拒绝?
    6. 在执行一个任务之前或之后,应该进行哪些动作?

    任务执行策略可以理解为一种资源管理工具,最佳策略取决于可用的计算资源以及对服务质量的需求。

    通过限制并发任务的数量,可以确保应用程序不会由于资源耗尽而失败,或者由于在稀缺资源上发生竞争而严重影响性能。

    通过将任务的提交和任务的执行策略分离开来,有助于在部署阶段选择与可用硬件资源最匹配的执行策略。

    Executor 生命周期:

    关闭 Executor: Executor 的实现通常会创建线程来执行任务,而 JVM 只有在所有(非守护)线程全部终止后才会退出。因此,如果无法正确的关闭 Executor,那么 JVM 则无法正常退出。

    ExecutorService: ExecutorService 扩展了 ExecutorService 接口,添加了一些管理生命周期的方法。ExecutorService 的生命周期有3种状态:运行关闭终止

    在刚被创建时 ExecutorService 处于初始状态

    调用 shutdown 方法或 shutdownNow 方法将使 ExecutorService 处于关闭状态

    shutdown 方法 的关闭过程较平缓,执行 shutdown 后 Executor 不会再接受新的任务,同时等待已经提交的任务执行完成。

    shutdownNow 方法 的关闭过程则十分粗暴,它将尝试取消所有运行中的任务,并且不再启动队列中尚未开始执行的任务。

    ExecutorService 处于关闭状态后提交的任务将由 “拒绝执行处理器(Rejected Execution Handler)”来处理,它会抛弃任务或者使得 execute 方法抛出一个未检查的 RejectedExecutionException。

    所有任务都执行结束或被强制关闭后,ExecutorService 进入终止状态。可以调用 awaitTermination 方法等待 ExecutorService 进入终止状态,也可以调用 isTerminated 方法轮询其是否终止。

    线程池

    线程池是管理一组同构工作线程的资源池,和工作队列密切相关。工作线程从工作队列中获取一个任务并执行,执行完后返回线程池并等待下一个任务。

    线程池可以重用现有的线程而不是为每个任务创建新的线程,这样便能避免线程创建和销毁过程中产生的巨大开销。此外,由于请求到达时线程已经存在,因此无需等待线程创建而延迟任务的执行,从而提高响应性。

    通过调整线程池的大小,可以使得线程数量恰好保证CPU处于忙碌状态的同时避免过多线程竞争资源而降低性能。

    Executors 中有创建各种线程池的静态工厂方法。

    1. newFixedThreadPool
      创建一个固定长度的线程池,一开始每当提交一个任务时就创建一个线程,直到达到线程池允许的最大线程数量,此时线程池的规模将不再变化。(若某个线程发生了未预期的 Exception 而结束,那么线程池会补充一个新的线程)。
    2. newCachedThreadPool
      创建一个可缓存的线程池,如果当前线程池的规模超过了处理需求时,那么将回收空闲的线程,而当需求增加时,则再添加新的线程,线程池的规模不存在任何限制。
    3. newSingleThreadExecutor
      创建单个工作者线程来执行任务,如果这个线程异常结束,会创建一个新的线程来代替。它能确保依照任务在队列中的顺序串行执行(如 FIFO、LIFO、优先级)。
    4. newScheduledThreadPool
      创建一个固定长度的线程池,而且以延迟或定时的方式来执行任务,类似于 Timer。
    展开全文
  • executor

    2020-04-28 05:55:17
    executor有哪些:

    executor有哪些:
    在这里插入图片描述

    展开全文
  • <code>executor</code> code has poor readability currently, we need refactoring the code. [test case] src/executor/executor_test.go src/executor/select_executor_test.go src/executor/union_executor_test...
  • <div><p>This change adds the executor locks to prevent concurrent non-commutative changes to replicas, and avoid deadlocks between multi-shard DML to the unified executor.</p><p>该提问来源于开源项目&#...
  • java Executor

    2020-04-17 17:16:59
    Executor框架是java 5 中引入的,内部使用了线程池机制。Executor框架包括:Executor, ExecutorService,Executors,ThreadPoolExecutor等。 Executor ——接口 public interface Executor { void execute ...

    Executor框架是java 5 中引入的,内部使用了线程池机制。Executor框架包括:Executor, ExecutorService,Executors,ThreadPoolExecutor等。

    Executor ——接口

    public interface Executor {
      void execute (Runnable command);
    }

    Executor接口中定义一个方法execute(Runnable command),该方法接收一个Runnable实例,它用来执行一个任务,任务即是一个实现了Runnable接口的类。

    ExecutorService——接口

    public interface ExecutorService extends Executor {
      void shutdown();
      List<Runnable> shutdownNow();
      boolean isShutdown();
      boolean isTerminated();
      boolean awaitTermination(long timeout, TimeUnit unit)
        throw InterruptedException;
      //...其他用于提交的便利方法
    }

     


    ExecutorService继承了Executor的接口,同时提供了更丰富的生命周期管理的方法。ExecutorService的生命周期有3种状态:运行、关闭和已停止。

    shutdown方法将执行平缓的关闭过程:不再接受新的任务,同时等待已经提交的任务执行完成——包括哪些还未开始执行的任务。

    shutdownNow方法将执行粗暴的关闭过程:它将尝试取消所有运行中的任务,并且不再启动队列中尚未开始执行的任务。

    Executors提供工厂方法用于创建线程池

    newFixedThreadPool:将创建固定长度的线程池,每提交一个任务就创建一个线程,直到达到线程池的最大数量。(如果某个线程由于发生了未预期的Exception而结束,那么线程池会补充一个新的线程)。
    newCachedThreadPool:创建一个可缓存的线程池,如果线程池的当前规模超过了处理需求时,那么将回收空闲的线程,而当需求增加时,则可以添加新的线程,线程池的规模不存在任何限制。
    newSingleThreadPool:是一个单线程的Executor,它创建单个工作线程来执行任务,如果这个线程异常结束,会创建另一个线程来替代。newSingleTreadPool能确保依照任务在队列中的顺序来串行执行(例如FIFO、LIFO、优先级)
    newScheduledThreadPool:创建一个固定长度的线程池,而且以延迟或定时的方式来执行任务。
    ThreadPoolExecutor

    ThreadPoolExecutor为一些Executor提供了基本的实现,这些Executor是由Executors中newCachedThreadPool、newFixedThreadPool等方法返回的。ThreadPoolExecutor是一个灵活的、稳定的线程池,允许进行各种定制。

    public ThreadPoolExecutor(int corePoolSize,//线程池的基本大小
                              int maximumPoolSize,//最大大小
                              long keepAliveTime,//存活时间
                              Timeout unit,
                              SlockingQueue<Runable> workQueue,
                              ThreadFactory threadFactory,
                              RejectExecutionHandler handler){...}
     

     


    通过调节线程池的基本大小和存活时间,可以帮助线程池回收空闲线程占有的资源。

    newFixedThreadPool工厂方法将线程池的基本大小和最大大小设置为参数中指定的值,而且创建的线程池不会超时。
    newCachedThreadPool工厂方法将线程池的最大大小设置为Integer.MAX_VALUE,而将基本大小设置为零,并将超时设置为1分钟,这种方式创建出来的线程池可以无限扩展,并且当需求降低会自动收获。
    //对通过标准工厂方法创建的Executor进行修改
    ExecutorService exec = Execoutors.newCachedThreadPool();
    if(exec instanceof ThreadPoolExecutor)
      ((ThreadPoolExecutor) exec).setCorePoolSize(10);
    else
      throw new AssertionError(*Oops, bad assumption);
     

    展开全文
  • npm i @runnerty/executor-mail 您还可以使用将模块添加到项目中 npx runnerty-cli add @runnerty/executor-mail 此命令将模块安装到项目中,在config.json添加示例配置,并创建示例使用计划。 如果已全局安装了 ...
  • Driver在向YARN集群管理器申请资源时,YARN集群管理器会尽可能按照你的设置来在集群的各个工作节点上,启动相应数量的Executor进程。这个参数非常之重要,如果不设置的话,默认只会给你启动少量的Executor进程,此时...

    https://www.cnblogs.com/xjh713/p/7309426.html

     

    num-executors


    参数说明:该参数用于设置Spark作业总共要用多少个Executor进程来执行。Driver在向YARN集群管理器申请资源时,YARN集群管理器会尽可能按照你的设置来在集群的各个工作节点上,启动相应数量的Executor进程。这个参数非常之重要,如果不设置的话,默认只会给你启动少量的Executor进程,此时你的Spark作业的运行速度是非常慢的。
    参数调优建议:每个Spark作业的运行一般设置50~100个左右的Executor进程比较合适,设置太少或太多的Executor进程都不好。设置的太少,无法充分利用集群资源;设置的太多的话,大部分队列可能无法给予充分的资源。

    executor-memory


    参数说明:该参数用于设置每个Executor进程的内存。Executor内存的大小,很多时候直接决定了Spark作业的性能,而且跟常见的JVM OOM异常,也有直接的关联。
    参数调优建议:每个Executor进程的内存设置4G~8G较为合适。但是这只是一个参考值,具体的设置还是得根据不同部门的资源队列来定。可以看看自己团队的资源队列的最大内存限制是多少,num-executors乘以executor-memory,就代表了你的Spark作业申请到的总内存量(也就是所有Executor进程的内存总和),这个量是不能超过队列的最大内存量的。此外,如果你是跟团队里其他人共享这个资源队列,那么申请的总内存量最好不要超过资源队列最大总内存的1/3~1/2,避免你自己的Spark作业占用了队列所有的资源,导致别的同学的作业无法运行。

    executor-cores


    参数说明:该参数用于设置每个Executor进程的CPU core数量。这个参数决定了每个Executor进程并行执行task线程的能力。因为每个CPU core同一时间只能执行一个task线程,因此每个Executor进程的CPU core数量越多,越能够快速地执行完分配给自己的所有task线程。
    参数调优建议:Executor的CPU core数量设置为2~4个较为合适。同样得根据不同部门的资源队列来定,可以看看自己的资源队列的最大CPU core限制是多少,再依据设置的Executor数量,来决定每个Executor进程可以分配到几个CPU core。同样建议,如果是跟他人共享这个队列,那么num-executors * executor-cores不要超过队列总CPU core的1/3~1/2左右比较合适,也是避免影响其他同学的作业运行。

    展开全文
  • <div><p>If I installed deimos on mesos slaves, can I still use the mesos default shell executor? If so, how to specify which executor to use? Thanks!</p><p>该提问来源于开源项目:mesosphere-...
  • Executor框架

    2020-05-29 18:45:03
    1. Executor框架的作用: Executor框架的作用就是把线程的执行(即一个任务)与线程的分配隔离开。 即,把一个任务交给Executor框架,Executor负责为任务分配线程去执行。 2.Executor框架的三大组成部分: 1) 任务...
  • <div><p>Put an initial prototype in place where we can experiment with having managed executor use policy executor for submit of Callable/Runnable when an internal property is set for that purpose....
  • JAVA executor

    2020-06-27 00:54:27
    executor executorservice (extends the above) scheduledexecutorservice (extends the above) executorservice and scheduledexectutorservice are mostly used. executor is abstract. Executor ....
  • Executor 框架

    2019-12-06 18:01:28
    面试题——说下 Executor? 一. Executor 框架的结构(三大部分) Executor 框架主要由三大部分组成: 任务(Runnable / Callable):包括被执行任务需要实现的 Runnable 接口或 Callable 接口。 任务的执行。包括...
  • Executor 详解

    2020-04-08 19:05:41
    SqlSession 是 Mybatis 提供个的操作数据库的API ,但是真正执行SQL的是Executor组件,Executor接口定义了对数据库的增删改查方法。Executor 接口中有几种不同的实现类。 BaseExecutor 中定义的方法的执行流程...
  • 相比传统的Thread类,Java Executor使用方便,性能更好,更易于管理,而且支持线程池,所以我们在开发爬虫的时候,为了提高爬虫的爬取效率,我们要使用多线程,推荐使用Java的Executor框架来实现,因为Executor框架 ...
  • Executor概述

    2021-03-11 22:00:46
    在Java类库中,任务执行的主要抽象不是Thread,而是Executor。 public interface Executor { void execute(Runnable command); } 它为灵活且强大的异步任务执行框架提供了基础,该框架能支持多种不同类型的...
  • <div><p>An initial set of changes to allow us to experiment with having managed executor's invokeAll use a policy executor.</p><p>该提问来源于开源项目:OpenLiberty/open-liberty</p></div>
  • Java Executor

    2019-09-26 23:18:56
    Executor(执行器) JavaSE5的java.util.concurrent包中的执行器Executor将为你管理Thread对象,从而简化了并发编程。 Executor在客户端和任务执行之间提供了一个间接层,与客户端执行任务不同,这个中介对象将执行...
  • 理解Executor

    2019-09-03 23:20:56
    我们需要把这两者分开,让工作单元包括Runnable和Callable,而执行机制由Executor框架提供。 Executor框架主要由3大部分组成: 任务。包括被执行任务需要实现的接口:Runnable接口或Callable接口 任务的执行。包括...
  • mybatis Executor

    2018-07-05 14:41:43
    Executor (https://my.oschina.net/zudajun/blog/667214) when? SqlSessionFactory创建Executor,并将Executor作为defaultSqlSession的构造参数传进去 what? sqlsession中利用Executor完成实际的sql操作...

空空如也

空空如也

1 2 3 4 5 ... 20
收藏数 33,413
精华内容 13,365
关键字:

executor