executor

How to get Executor for main thread on API level < 28

自闭症网瘾萝莉.ら 提交于 2020-12-29 05:31:05
问题 On API level 28(Pie) a new method is introduced in the Context class to get Executor for the main thread getMainExecutor(). How to get this executor on API level below 28? 回答1: You can use (in activity for example): ContextCompat.getMainExecutor(this); https://developer.android.com/reference/androidx/core/content/ContextCompat.html#getMainExecutor(android.content.Context) 回答2: You can use code snippet from retrofit https://github.com/square/retrofit/blob/master/retrofit/src/main/java

mybatis执行一条sql的流程

元气小坏坏 提交于 2020-04-08 11:48:54
一次insert操作过程 以保存一条记录到表中这个简单的操作为例,就按这个例子来跟踪mybatis是如何执行sql语句的,要保存一个user记录到表中: sqlSession.insert("x.y.insertUser", user); 首先当然是要看看 SqlSession#insert 方法,到 DefaultSqlSession 这个实现类中查找具体的实现,下面两个代码片段是insert方法实现中的调用链: @Override public int insert(String statement, Object parameter) { return update(statement, parameter); } @Override public int update(String statement, Object parameter) { try { dirty = true; MappedStatement ms = configuration.getMappedStatement(statement); return executor.update(ms, wrapCollection(parameter)); } catch (Exception e) { throw ExceptionFactory.wrapException("Error updating

Spark: what's the advantages of having multiple executors per node for a Job?

試著忘記壹切 提交于 2020-04-08 06:00:09
问题 I am running my job on AWS-EMR cluster. It is a 40 nodes cluster using cr1.8xlarge instances. Each cr1.8xlarge has 240G memory and 32 cores. I can run with the following config: --driver-memory 180g --driver-cores 26 --executor-memory 180g --executor-cores 26 --num-executors 40 --conf spark.default.parallelism=4000 or --driver-memory 180g --driver-cores 26 --executor-memory 90g --executor-cores 13 --num-executors 80 --conf spark.default.parallelism=4000 Since from the job-tracker website, the

Spark: what's the advantages of having multiple executors per node for a Job?

99封情书 提交于 2020-04-08 05:59:07
问题 I am running my job on AWS-EMR cluster. It is a 40 nodes cluster using cr1.8xlarge instances. Each cr1.8xlarge has 240G memory and 32 cores. I can run with the following config: --driver-memory 180g --driver-cores 26 --executor-memory 180g --executor-cores 26 --num-executors 40 --conf spark.default.parallelism=4000 or --driver-memory 180g --driver-cores 26 --executor-memory 90g --executor-cores 13 --num-executors 80 --conf spark.default.parallelism=4000 Since from the job-tracker website, the

jdk下httpserver源码解析

送分小仙女□ 提交于 2020-04-05 19:41:37
在写这篇博客之前我查了很久发现全网都没有一篇写httpserver源码解析的 所以今天就由我来为大家解析一下httpserver的源码。(这里我会去掉其中的https部分的源码,只讲http部分,对httpserver中https的实现感兴趣的读者可以尝试自己去阅读,这部分并不复杂) 第一次在没有参考资料的情况下写这么长一篇源码解析,可能会有很多错误和讲不清楚的地方,希望大家尽量指出来。 本文链接 https://www.cnblogs.com/fatmanhappycode/p/12614428.html httpserver的简单使用例子 大家最好先跟着我构建这样一个小demo, 跑起来之后再一步一步去看源码 /** * @author 肥宅快乐码 */ public class HttpServerSample { private static void serverStart() throws IOException { HttpServerProvider provider = HttpServerProvider.provider(); // 监听端口8080,连接排队队列,如果队列中的连接超过这个数的话就会拒绝连接 HttpServer httpserver =provider.createHttpServer(new InetSocketAddress(8080),

spark 任务运行原理

痞子三分冷 提交于 2020-03-30 07:58:58
调优概述 在开发完Spark作业之后,就该为作业配置合适的资源了。Spark的资源参数,基本都可以在spark-submit命令中作为参数设置。很多Spark初学者,通常不知道该设置哪些必要的参数,以及如何设置这些参数,最后就只能胡乱设置,甚至压根儿不设置。资源参数设置的不合理,可能会导致没有充分利用集群资源,作业运行会极其缓慢;或者设置的资源过大,队列没有足够的资源来提供,进而导致各种异常。总之,无论是哪种情况,都会导致Spark作业的运行效率低下,甚至根本无法运行。因此我们必须对Spark作业的资源使用原理有一个清晰的认识,并知道在Spark作业运行过程中,有哪些资源参数是可以设置的,以及如何设置合适的参数值。 Spark作业基本运行原理 详细原理见上图。我们使用spark-submit提交一个Spark作业之后,这个作业就会启动一个对应的Driver进程。根据你使用的部署模式(deploy-mode)不同,Driver进程可能在本地启动,也可能在集群中某个工作节点上启动。Driver进程本身会根据我们设置的参数,占有一定数量的内存和CPU core。而Driver进程要做的第一件事情,就是向集群管理器(可以是Spark Standalone集群,也可以是其他的资源管理集群,美团•大众点评使用的是YARN作为资源管理集群)申请运行Spark作业需要使用的资源

线程池ThreadPoolExecutor详解

醉酒当歌 提交于 2020-03-24 07:21:22
3 月,跳不动了?>>> 一简介 线程的使用在java中占有极其重要的地位,在jdk1.4极其之前的jdk版本中,关于线程池的使用是极其简陋的。在jdk1.5之后这一情况有了很大的改观。Jdk1.5之后加入了java.util.concurrent包,这个包中主要介绍java中线程以及线程池的使用。为我们在开发中处理线程的问题提供了非常大的帮助。 二:线程池 线程池的作用: 线程池作用就是限制系统中执行线程的数量。 根据系统的环境情况,可以自动或手动设置线程数量,达到运行的最佳效果;少了浪费了系统资源,多了造成系统拥挤效率不高。用线程池控制线程数量,其他线程排队等候。一个任务执行完毕,再从队列的中取最前面的任务开始执行。若队列中没有等待进程,线程池的这一资源处于等待。当一个新任务需要运行时,如果线程池中有等待的工作线程,就可以开始运行了;否则进入等待队列。 为什么要用线程池: 1.减少了创建和销毁线程的次数,每个工作线程都可以被重复利用,可执行多个任务。 2.可以根据系统的承受能力,调整线程池中工作线线程的数目,防止因为消耗过多的内存,而把服务器累趴下(每个线程需要大约1MB内存,线程开的越多,消耗的内存也就越大,最后死机)。 Java里面线程池的顶级接口是Executor,但是严格意义上讲Executor并不是一个线程池,而只是一个执行线程的工具