executor

Tomcat 的连接数与线程池

∥☆過路亽.° 提交于 2019-11-30 05:43:52
前言 在使用tomcat时,经常会遇到连接数、线程数之类的配置问题,要真正理解这些概念,必须先了解Tomcat的连接器(Connector)。 在前面的文章 详解Tomcat配置文件server.xml 中写到过:Connector的主要功能,是接收连接请求,创建Request和Response对象用于和请求端交换数据;然后分配线程让Engine(也就是Servlet容器)来处理这个请求,并把产生的Request和Response对象传给Engine。当Engine处理完请求后,也会通过Connector将响应返回给客户端。 可以说,Servlet容器处理请求,是需要Connector进行调度和控制的,Connector是Tomcat处理请求的主干,因此Connector的配置和使用对Tomcat的性能有着重要的影响。这篇文章将从Connector入手,讨论一些与Connector有关的重要问题,包括NIO/BIO模式、线程池、连接数等。 根据协议的不同,Connector可以分为HTTP Connector、AJP Connector等,本文只讨论HTTP Connector。 一、Nio、Bio、APR 1、Connector的protocol Connector在处理HTTP请求时,会使用不同的protocol。不同的Tomcat版本支持的protocol不同

axios 之cancelToken原理以及使用

前提是你 提交于 2019-11-30 01:36:27
看axios文档的时候发现cancelToken这个东东,这个是用来取消ajax请求的,一般原生的话用的是abort()这个方法。看到这玩意的第一感觉是用起来有点麻烦,但是看了内部实现,发现还是比较有意思的,今天就来分享一下。 基本使用 我们先来看看基本用法: var CancelToken = axios.CancelToken; var source = CancelToken.source(); axios.get('/user/12345', {//get请求在第二个参数 cancelToken: source.token }).catch(function(thrown) { }); axios.post('/user/12345', {//post请求在第三个参数 name: 'new name' }, { cancelToken: source.token }); source.cancel('不想请求了'); 注意,get请求的时候,cancelToken是放在第二个参数里;post的时候,cancelToken是放在第三个参数里。 我们可以发现,它要先引用axios.CancelToken,然后调用source()方法,会产生一个token和cancel,它的内部到底如何实现,这样做的目的是什么? 源码分析 现在我们来看看cancelToken的源码: 'use

运行 jar

主宰稳场 提交于 2019-11-29 19:00:57
rz rm -rf incoHive.jar >>spark-submit --queue=mr --class com.inco.hive.CNlawTOxml.Lge_SparkRead --master yarn --num-executors 10 --executor-memory 10g --total-executor-cores 100 --jars /opt/exlib/source-1.0.jar /home/liyingying/incoHive.jar >>nohup spark-submit --queue=mr --class com.inco.hive.CNlawTOxml.Lge_SparkRead --master yarn --num-executors 10 --executor-memory 10g --total-executor-cores 100 --jars /opt/exlib/source-1.0.jar /home/liyingying/incoHive.jar & --2.11 >>nohup spark-submit --queue=mr --class com.inco.hive.CNlawTOxml.Lge_ReadNew --master yarn --num-executors 10 --executor

spark02

浪子不回头ぞ 提交于 2019-11-29 19:00:39
spark02 自定义资源分配 --executor-cores --executor-memory --total-executor-cores 最大允许使用多少核数 3 台机器 每个机器 8cores 1G --executor-cores --executor-memory --total-executor-cores executors 8 1G 3 4 1G 3 4 1G 4 1 4 512M 6 4 512M 8 2 6 512M 3 RDD 的简介 At a high level, every Spark application consists of a driver program that runs the user’s main function and executes various parallel operations on a cluster. The main abstraction Spark provides is a resilient distributed dataset (RDD), which is a collection of elements partitioned across the nodes of the cluster that can be operated on in parallel. RDDs are

How to stop next thread from running in a ScheduledThreadPoolExecutor

狂风中的少年 提交于 2019-11-29 17:36:21
I have a ScheduledThreadPoolExecutor which has one thread and runs for every 30 seconds. Now, if the current executing thread throws some exception, then I need to make sure that the next thread do not run and the the ScheduledThreadPoolExecutor is down. How do I achieve this? As a clean way, you can simply use a static accessed class to set/check the execution availability. import java.util.concurrent.atomic.AtomicBoolean; class ThreadManager { private static AtomicBoolean shouldStop = new AtomicBoolean(false); public static void setExceptionThrown(boolean val) { shouldStop.set(val); } public

Executor suitable for non thread-safe code

為{幸葍}努か 提交于 2019-11-29 14:45:16
I am developing some code that will eventually be multithreaded, using a thread pool Executor . The tasks executed by the thread pool will make call-backs and (sometimes) submit further tasks to the task queue. I would like to develop the code single threaded first, get it right (I'm using Test Driven Development) and only then make the alterations to ensure thread safety (locks, etc). To do that, I need an Executor that is safe to use with non thread-safe code. I think that means I need an Executor that is single-threaded. That is, it is causes all work to be done by the calling thread. Does

从源码的角度认识AsyncTask

耗尽温柔 提交于 2019-11-29 14:37:37
一、为什么需要工作者线程 我们知道,Android应用的主线程(UI 线程)肩负着绘制用户界面和及时响应用户操作的重任,为了避免“用户点击按钮后没反应”这样的糟糕用户体验,我们就要确保主线程时刻保持着较高的响应性。为了做到这一点,我们就要把耗时的任务移出主线程,那么耗时的任务交给谁来完成呢?答案就是工作者线程。Android开发中我们通常让主线程负责前台用户界面的绘制以及响应用户的操作,让工作者线程在后台执行一些比较耗时的任务。Android中的工作者线程主要有AsyncTask、IntentService、HandlerThread,它们本质上都是对线程或线程池的封装。对线程和线程池还不太熟悉的小伙伴请参考文末“延伸阅读”部分给出的链接。 总的来说,我们使用工作者线程是因为主线程已经有很多活要干了,累活就得交给别人干。AsyncTask是我们日常中广泛使用的一种工作者线程,它的方便之处在于可以在后台任务执行完毕时根据返回结果相应的更新UI。下面我们来研究一下它的工作原理。 二、探索AsyncTask的工作原理 1. AsyncTask的使用简介 AsyncTask是对Handler与线程池的封装。使用它的方便之处在于能够更新用户界面,当然这里更新用户界面的操作还是在主线程中完成的,但是由于AsyncTask内部包含一个Handler,所以可以发送消息给主线程让它更新UI。另外

Executor ExecutorService Executors

こ雲淡風輕ζ 提交于 2019-11-29 14:04:51
Executor public interface Executor { void execute(Runnable command); } ExecutorService ExecutorService 是一个接口,继承了 Executor 接口,定义了一些生命周期的方法 public interface ExecutorService extends Executor { //顺次地关闭ExecutorService,停止接收新的任务,等待所有已经提交的任务执行完毕之后,关闭ExecutorService void shutdown(); //阻止等待任务启动并试图停止当前正在执行的任务,停止接收新的任务,返回处于等待的任务列表 List<Runnable> shutdownNow(); //判断线程池是否已经关闭 boolean isShutdown(); //如果关闭后所有任务都已完成,则返回 true。注意,除非首先调用 shutdown 或 shutdownNow,否则 isTerminated 永不为 true。 boolean isTerminated(); //等待(阻塞)直到关闭或最长等待时间或发生中断,如果此执行程序终止,则返回 true;如果终止前超时期满,则返回 false boolean awaitTermination(long timeout,

Java 8 (10) CompletableFuture:组合式异步编程

送分小仙女□ 提交于 2019-11-29 10:12:15
Java 8 (10) CompletableFuture:组合式异步编程   随着多核处理器的出现,提升应用程序的处理速度最有效的方式就是可以编写出发挥多核能力的软件,我们已经可以通过切分大型的任务,让每个子任务并行运行,使用线程的方式,分支/合并框架(java 7) 和并行流(java 8)来实现。 现在很多大型的互联网公司都对外提供了API服务,比如百度的地图,微博的新闻,天气预报等等。很少有网站或网络应用汇以完全隔离的方式工作,而是采用混聚的方式:它会使用来自多个源的内容,将这些内容聚合在一起,方便用户使用。 比如实现一个功能,你需要在微博中搜索某个新闻,然后根据当前坐标获取天气预报。这些调用第三方信息的时候,不想因为等待搜索新闻时,放弃对获取天气预报的处理,于是我们可以使用 分支/合并框架 及并行流 来并行处理,将他们切分为多个子操作,在多个不同的核、CPU甚至是机器上并行的执行这些子操作。 相反,如果你想实现并发,而不是并行,或者你的主要目标是在同一个CPU上执行几个松耦合的任务,充分利用CPU的核,让其足够忙碌,从而最大化程序的吞吐量,那么你其实真正想做的是避免因为等待远程服务的返回,或者对数据库的查询,而阻塞线程的执行,浪费宝贵的计算资源,因为这种等待时间可能会很长。Future接口,尤其是它的新版实现CompletableFuture是处理这种情况的利器。

MyBatis源码流程分析

假如想象 提交于 2019-11-29 07:07:29
mybatis核心流程三大阶段 Mybatis的初始化 建造者模式 建造者模式(Builder Pattern)使用多个简单的对象一步一步构建成一个复杂的对象。这种类型的设计模式属于创建型模式,它提供了一种创建对象的最佳方式。 Product:要创建的复杂对象 Builder:给出一个抽象接口,以规范产品对象的各个组成成分的建造。这个接口规定要实现复杂对象的哪些部分的创建,并不涉及具体的对象部件的创建; ConcreteBuilder:实现Builder接口,针对不同的商业逻辑,具体化复杂对象的各部分的创建。 在建造过程完成后,提供产品的实例; Director:调用具体建造者来创建复杂对象的各个部分,在指导者中不涉及具体产品的信息,只负责保证对象各部分完整创建或按某种顺序创建; 建造者模式 使用场景   ·需要生成的对象具有复杂的内部结构,实例化对象时要屏蔽掉对象内部的细节,让上层代码与复杂对象的实例化过程解耦,可以使用建造者模式;简而言之,如果“遇到多个构造器参数时要考虑用构建器”;   ·对象的实例化是依赖各个组件的产生以及装配顺序,关注的是一步一步地组装出目标对象,可以使用建造器模式; 建造者模式与工厂模式之间的区别: Mybatis的初始化 MyBatis建造者类图 映射器的关键类 Configuration :