executor

Executor与四种线程池

旧街凉风 提交于 2019-12-02 18:08:44
这是一篇迟来的文章,从上一篇文章开始,就说要介绍Executor,但是由于有事一直>拖了好久,如果还没有看过上一篇文章的用户,可以阅读一下 Android异步处理的几>种方式 。 Excutor Excutor实质上只是一个接口而已,所以我们可以建立一个类用来实现这个Excutor。 public class MyExecutor implements Executor { @Override public void execute (Runnable runnable) { new Thread(runnable).start(); } } 当然对Executor简单的实现,意义并不是很大,我们需要的是对每个任务的控制和调度,这样,通常需要增加队列,以及优先级的功能。这也就是所谓的线程池,线程池是任务队列和线程的集合。好了下面一个个说。 ExecutorService ExecutorService提供了管理终止的方法,以及可以跟踪一个或多个异步任务执行状况而生成 Future 的接口。 根据图中列出的方法可以看到,提供了关闭的方法shutdownNow() , shutdownNow() 方法阻止等待任务的启动并试图停止当前正在执行的任务。在终止后,执行程序没有任务在执行,也没有任务在等待执行,并且无法提交新任务。 我们可以看一下继承实现关系

Java并发编程——Executor框架

旧时模样 提交于 2019-12-02 18:05:57
内容 在公司中处理kafka任务时,我运用了线程池来创建多个线程处理来处理kafka命令。当然创建的线程是固定线程池,当时的考虑是因为资源的有限性,并且当时是对kafka中传过来的视频和图片多编解码,所以占用时间又点长。为了合理利用线程池,专门去学习关于这方面的知识,分享给大家! 线程池介绍 1.为什么要使用线程池? 降低资源的消耗 提高响应的速度 提高线程的管理 2. 线程的工作原理 线程池判断核心线程池的线程是否都在执行任务。如果不是,创建一个新的工作线程来执行任务。如果核心线程里面的线程都在执行任务,进入下一个流程 线程池判断工作队列是否已满,如果未满,则将新的任务存储在这个工作队列里面,如果满了,进入下一个流程 线程池判断线程池的线程是否都处于工作状态。如果没有,则创建一个新的工作线程来执行任务。如果已经满了,则交给饱和策略处理这个任务 3. ThreadPoolExecutor的核心参数 public ThreadPoolExecutor(int corePoolSize, int maximumPoolSize, long keepAliveTime, TimeUnit unit, BlockingQueue<Runnable> workQueue, ThreadFactory threadFactory, RejectedExecutionHandler

Unhandled exceptions with Java scheduled executors

醉酒当歌 提交于 2019-12-02 17:59:30
I have the following issue and I would like to know what exactly happens. I am using Java's ScheduledExecutorService to run a task every five minutes. It works very well. Executors completely changed the way I do thread programming in Java. Now, I browsed Java Doc for information about what would be the behavior in case the scheduled task fails with an unhandled exception, but couldn't find anything. Is the next scheduled task still going to run? If there is an unhandled exception, the scheduled executor stops scheduling task? Can anyone point to information regarding this simple issue? Thanks

java 四种线程池

自作多情 提交于 2019-12-02 17:57:32
Java通过Executors提供四种线程池,各有用处,下面是列子: package executor; import java.util.concurrent.ExecutorService; import java.util.concurrent.Executors; import java.util.concurrent.ScheduledExecutorService; import java.util.concurrent.TimeUnit; /** * <p>线程池</p> Java通过Executors提供四种线程池,分别为: newCachedThreadPool -- 创建一个可缓存线程池,如果线程池长度超过处理需要, -- 可灵活回收空闲线程,若无可回收,则新建线程。 newFixedThreadPool -- 创建一个定长线程池,可控制线程最大并发数,超出的线程会在队列中等待。 newScheduledThreadPool -- 创建一个定长线程池,支持定时及周期性任务执行。 newSingleThreadExecutor -- 创建一个单线程化的线程池,它只会用唯一的工作线程来执行任务, -- 保证所有任务按照指定顺序(FIFO, LIFO, 优先级)执行。 * @title - ThreadPool.java * @author - NingZhong

Calling Looper more than once causes “sending message to a Handler on a dead thread”

半世苍凉 提交于 2019-12-02 04:10:26
I am using an Executor [fixed thread pool] with my own ThreadFactory that adds a Looper: Handler HANDLER = new Handler(); Executor THREADS = Executors.newFixedThreadPool(THREAD_POOL_SIZE, new ThreadFactory() { @Override public Thread newThread(Runnable runnable) { return new MyThread(new Runnable() { @Override public void run() { Looper.prepare(); runnable.run(); } }); } }); private static class MyHandler extends Handler { public boolean fail; public void handleMessage(Message msg) { switch(msg.what) { case 1: this.fail = msg.arg1 == 1; Looper.myLooper().quit(); break; } } } } I am running a

spark程序与参数的关系

扶醉桌前 提交于 2019-12-02 03:48:02
What is spark.python.worker.memory? Spark on YARN resource manager: Relation between YARN Containers and Spark Executors? When running Spark on YARN, each Spark executor runs as a YARN container 所以说,--executor-memory <= yarn.scheduler.maximum-allocation-mb(一个container的最大值) yarn.scheduler.maximum-allocation-mb <= yarn.nodemanager.resource.memory-mb (每个节点yarn可以使用的内存资源上线) --executor-memory <= yarn.scheduler.maximum-allocation-mb(一个container的最大值) <= yarn.nodemanager.resource.memory-mb (每个节点yarn可以使用的内存资源上线) execuoterNum = spark.cores.max/spark.executor.cores 每个executor上可以执行多少个task taskNum = spark

Spark 集群 任务提交模式

守給你的承諾、 提交于 2019-12-02 03:38:45
Spark 集群的模式及提交任务的方式 本文大致的内容图 Spark 集群的两种模式: Standalone 模式 Standalone-client 任务提交方式 提交命令 ./spark-submit --master spark://node1:7077 (主节点的位置) --class 类的包+类名 jar包的位置 1000 # 分区参数, 也可以说是并行度 || ./spark-submit --master spark://node1:7077 --deploy-mode client --class 类的包+类名 jar包的位置 100 # 分区参数, 也可以说是并行度 执行原理 执行流程 client 模式提交任务后, 会在客户端启动Driver进程 Driver 会向 Master 申请启动 Application启动的资源 资源申请成功, Driver 端将 task 发送到 worker端执行 Worker 端将 task 执行结果 返回 到 Driver 端 总结 client模式适用于测试调试程序。 Driver进程是在客户端启动的。这里的客户端指的是应用程序的当前节点 在Driver端可以看到task执行的情况。 生产环境下不能使用client模式是因为: 假设提交100个 Application 到集群运行, Driver每次都会在client端启动,

深入理解spark的工作机制,spark任务提交和执行流程

[亡魂溺海] 提交于 2019-12-02 02:55:02
spark的工作机制: 用户在client端提交作业后,会由Driver运行main方法并创建spark context上下文。 SparkContext向资源管理器(可以是Standalone,Mesos,Yarn)申请运行Executor资源,并启动StandaloneExecutorbackend, Executor向SparkContext申请Task。SparkContext将应用程序分发给Executor,SparkContext构建成DAG有向无环图,将DAG有向无环图分解成Stage、将Taskset发送给Task Scheduler,最后由TaskScheduler将Task发送给Executor运行,Task在Executor上运行,运行完释放所有资源 spark中的核心组件: Driver :spark驱动节点,负责实际代码的执行。 Driver在spark作业执行主要负责: 1.将用户程序转化为job 2.在Executor之间调度任务(task) 3.跟踪Executor的执行情况 4.通过ui界面可以查询运行情况 Executor: executor是一个jvm进程,负责spark作业中执行具体的任务,spark启动时,executor节点被同时启动,如何当前executor节点发生故障,spark应用(Application)也可以继续执行

spark基本概念-Spark中Task,Partition,RDD、节点数、Executor数、core数目的关系和Application,Driver,Job,Task,Stage理解

强颜欢笑 提交于 2019-12-01 18:28:21
梳理一下Spark中关于并发度涉及的几个概念File,Block,Split,Task,Partition,RDD以及节点数、Executor数、core数目的关系。 输入可能以多个文件的形式存储在HDFS上,每个File都包含了很多块,称为Block。 当Spark读取这些文件作为输入时,会根据具体数据格式对应的InputFormat进行解析,一般是将若干个Block合并成一个输入分片,称为InputSplit,注意InputSplit不能跨越文件。 随后将为这些输入分片生成具体的Task。InputSplit与Task是一一对应的关系。 随后这些具体的Task每个都会被分配到集群上的某个节点的某个Executor去执行。 每个节点可以起一个或多个Executor。 每个Executor由若干core组成,每个Executor的每个core一次只能执行一个Task。 每个Task执行的结果就是生成了目标RDD的一个partiton。 注意: 这里的core是虚拟的core而不是机器的物理CPU核,可以理解为就是Executor的一个工作线程。 而 Task被执行的并发度 = Executor数目 * 每个Executor核数。 至于partition的数目: 对于数据读入阶段,例如sc.textFile,输入文件被划分为多少InputSplit就会需要多少初始Task。

Storm 流式计算框架

…衆ロ難τιáo~ 提交于 2019-12-01 17:27:45
1. 简介 是一个分布式, 高容错的 实时计算框架 Storm进程常驻内存, 永久运行 Storm数据不经过磁盘, 在内存中流转, 通过网络直接发送给下游 流式处理(streaming) 与 批处理(batch) 批处理(batch): MapReduce 微批处理(MircroBatch): Spark (性能上近似 Streaming, 但是还是有所不及) 流(streaming): Storm, Flink(其实Flink也可以做批处理) Storm MapReduce 流式处理 批处理 毫秒级 分钟级 DAG模型 Map+Reduce模型 常驻运行 反复启停 Storm 计算模型 Topology - DAG 有向无环图 例图: (Spout: 喷嘴) 对Storm实时计算逻辑进行封装 由一系列通过数据流相互关联的Spout、Bolt锁组成的拓扑结构 生命周期: 此拓扑只要启动就会一直在集群中运行, 直到手动将其kill, 否则不会终止 (与MapReduce中的Job的区别: MR中的Job在计算机执行完成就会终止) Tuple - 元组 Stream中最小的数据组成单元(熟悉python的一定不会陌生) Stream - 数据流 从Spout 中源源不断传递数据给Bolt、以及上一个Bolt传递数据给下一个Bolt, 所形成的的数据通道为Stream