线程数

(转)Python多任务之线程

穿精又带淫゛_ 提交于 2019-12-01 02:08:34
https://www.cnblogs.com/yifchan/p/python-1-41.html 多任务介绍 我们先来看一下没有多任务的程序 import time def sing(): for i in range(5): print("我喜欢唱") time.sleep(1) def dance(): for i in range(5): print("我喜欢跳") time.sleep(1) def main(): sing() dance() pass if __name__ == "__main__": main() 运行结果:花了十秒钟多,只能按顺序执行,无法一起/同步执行 我喜欢唱 我喜欢唱 我喜欢唱 我喜欢唱 我喜欢唱 我喜欢跳 我喜欢跳 我喜欢跳 我喜欢跳 我喜欢跳 我们再来看一下使用了多线程的程序 import time import threading def sing(): for i in range(5): print("我喜欢唱歌") time.sleep(1) def dance(): for i in range(5): print("我喜欢跳舞") time.sleep(1) def main(): t1 = threading.Thread(target=sing) t2 = threading.Thread(target=dance)

tomcat配置优化

爱⌒轻易说出口 提交于 2019-12-01 01:53:22
转载:www.cnblogs.com/wangsen 最近,看到一篇讲述 Tomcat 调优的文章,写得挺不错的,由于之前写了好几篇关于 Tomcat 的文章,这篇分享给各位读者,做一下补充。 原文如下。 一、描述 最近,在补充自己的短板,刚好整理到 Tomcat 调优这块,基本上面试必问,于是就花了点时间去搜集一下 Tomcat 调优都调了些什么,先记录一下调优手段,更多详细的原理和实现以后用到时候再来补充记录,下面就来介绍一下,Tomcat 调优大致分为两大类。 1、Tomcat的自身调优 采用动静分离节约 Tomcat 的性能 调整 Tomcat 的线程池 调整 Tomcat 的连接器 修改 Tomcat 的运行模式 禁用 AJP 连接器 2、JVM的调优 调优Jvm内存 二、Tomcat 自身调优 1、采用动静分离 静态资源如果让 Tomcat 处理的话 Tomcat 的性能会被损耗很多,所以我们一般都是采用:Nginx+Tomcat 实现动静分离,让 Tomcat 只负责 jsp 文件的解析工作,Nginx 实现静态资源的访问。 2、调优 Tomcat 线程池 打开tomcat的serve.xml,配置Executor,相关参数说明如下。 name :给执行器(线程池)起一个名字; namePrefix :指定线程池中的每一个线程的 name 前缀; maxThreads

Java线程池详解及实例

♀尐吖头ヾ 提交于 2019-11-30 21:48:39
版权声明:本文为博主原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。 本文链接:https://blog.csdn.net/aa1215018028/article/details/82814192 前言 多线程的异步执行方式,虽然能够最大限度发挥多核计算机的计算能力,但是如果不加控制,反而会对系统造成负担。线程本身也要占用内存空间,大量的线程会占用内存资源并且可能会导致Out of Memory。即便没有这样的情况,大量的线程回收也会给GC带来很大的压力。 为了避免重复的创建线程,线程池的出现可以让线程进行复用。通俗点讲,当有工作来,就会向线程池拿一个线程,当工作完成后,并不是直接关闭线程,而是将这个线程归还给线程池供其他任务使用。 接下来从总体到细致的方式,来共同探讨线程池。 总体的架构 来看Executor的框架图: 接口:Executor,CompletionService,ExecutorService,ScheduledExecutorService 抽象类:AbstractExecutorService 实现类:ExecutorCompletionService,ThreadPoolExecutor,ScheduledThreadPoolExecutor 从图中就可以看到主要的方法

必须掌握的阶梯式性能指标监听!

故事扮演 提交于 2019-11-30 20:29:36
概述 我们在进行阶梯式压力测试的时候,聚合报告生成的结果是一个汇总数据。 并不会阶梯式的统计压测性能数据。 这样我们就不能去对比不同阶梯压力下的性能数据变化趋势。 期望 假设现在一共会加载100个线程,我期望聚合报告中 分别展示1-20,20-40,40-60,60-80的四个阶段的线程并发性能数据,而不是一共总体的统计数据。 实现 jmeter本身不具备这样的工具,需要通过自定义代码去实现 。 1添加阶梯线程组 测试计划》添加》Threads》jp@gc - Stepping Thread Group (deprecated) 共5个阶梯,每次加载20个,最终希望加载100个线程 2添加BeahShell脚本 代码实现了实时获取活动的线程总数,根据活动线程总数赋值给变量 Thread 供后续事务调用 import org.apache.jmeter.threads.JMeterContextService;int num = JMeterContextService.getNumberOfThreads();System.out.println("当前活动线程数=" +num);if(num<=20){ System.out.println("线程区间1-20"); vars.put("Thread","线程数1-20"); }​ else if (num>20&&num<=40

高可用之降级、限流、拒绝服务

余生长醉 提交于 2019-11-30 18:09:02
Reference: https://time.geekbang.org/column/article/40744 高可用建设 系统的⾼可⽤建设,它其实是⼀个系统⼯程,需要考虑到系统建设的各个阶段,也就是说它其实贯穿了系统建设的整个⽣命周期,如下图所⽰: 具体来说,系统的⾼可⽤建设涉及架构阶段、编码阶段、测试阶段、发布阶段、运⾏阶段,以及故障发⽣时。 1. 架构阶段:架构阶段主要考虑系统的可扩展性和容错性,要避免系统出现单点问题。例如多机房单元化部署,即使某个城市的某个机房出现整体故障,仍然不会影响整体⽹站的运转。 2. 编码阶段:编码最重要的是保证代码的健壮性,例如涉及远程调⽤问题时,要设置合理的超时退出机制,防⽌被其他系统拖垮,也要对调⽤的返回结果集有预期,防⽌返回的结果超出程序处理范围,最常见的做法就是对错误异常进⾏捕获,对⽆法预料的错误要有默认处理结果。 3. 测试阶段:测试主要是保证测试⽤例的覆盖度,保证最坏情况发⽣时,我们也有相应的处理流程。 4. 发布阶段:发布时也有⼀些地⽅需要注意,因为发布时最容易出现错误,因此要有紧急的回滚机制。 5. 运⾏阶段:运⾏时是系统的常态,系统⼤部分时间都会处于运⾏态,运⾏态最重要的是对系统的监控要准确及时,发现问题能够准确报警并且报警数据要准确详细,以便于排查问题。 6. 故障发⽣:故障发⽣时⾸先最重要的就是及时⽌损

Java线程池基础

杀马特。学长 韩版系。学妹 提交于 2019-11-30 12:55:19
目录: 一、线程池概述 二、线程池参数 三、线程池的执行过程 四、线程池的主要实现 五、线程池的使用 六、线程池的正确关闭方式 七、线程池参数调优 一、线程池概述   1、线程池类    目前线程池类一般有两个,一个来自于Spring,一个来自于JDK : 来自Spring的线程池:org.springframework.scheduling.concurrent.ThreadPoolTaskExecutor 来自JDK的线程池:java.util.concurrent.ThreadPoolExecutor    说明:两个线程池类中的参数【线程池最大线程数】写法不同,在Spring线程池中为maxPoolSize,在JDK线程池中为maximumPoolSize,等价 。    两个线程池类的配置差不多,Spring的做了一些配置参数的简化,最终调用JDK的API 。    在执行并发任务时,我们可以把任务传递给一个线程池,来替代为每个并发执行的任务都启动一个新的线程,只要线程池里有空闲的线程,任务就会分配给一个线程执行。在线程池的内部,当线程数量达到线程池核心线程数时,后续的任务被插入一个阻塞队列(BlockingQueue)进行等待,线程池里的空闲线程会去取这个队列里的任务 。    利用线程池的三个好处 : 降低资源消耗。通过重复利用已创建的线程降低线程创建和销毁造成的消耗

Java线程池的拒绝策略

瘦欲@ 提交于 2019-11-30 12:14:26
一、简介   jdk1.5 版本新增了JUC并发编程包,大大的简化了传统的多线程开发。前面文章中介绍了线程池的使用,链接地址: https://www.cnblogs.com/eric-fang/p/9004020.html   Java线程池,是典型的池化思想的产物,类似的还有数据库的连接池、redis的连接池等。池化思想,就是在初始的时候去申请资源,创建一批可使用的连接,这样在使用的时候,就不必再进行创建连接信息的开销了。举个生活中鲜明的例子,在去著名洋快餐某基或者某劳的时候,配餐人员是字节从一个中间的保温箱里面直接取,然后打包就好了。不用再临时的来了一个单子,又要去拿原材料,又要去进行加工。效率明显的就是提高了很多。   既然是池子,那么必然的会存在最大值、初始值以及存活值等属性。在达到某些特定条件的时候,再来请求的话,池子是如何进行请求处理的呢?这里就引出了池的拒绝策略。一般的数据库连接池在达到最大连接数的时候会默认的等待特定的设置的时间或者直接就抛出异常。而本文中要阐述的线程池却并非如此的策略,下面开始展开讲解下。 二、线程池的拒绝策略   线程池中,有三个重要的参数,决定影响了拒绝策略:corePoolSize - 核心线程数,也即最小的线程数。workQueue - 阻塞队列 。 maximumPoolSize - 最大线程数   当提交任务数大于

JMeter

╄→尐↘猪︶ㄣ 提交于 2019-11-30 10:26:46
原文转自: https://blog.csdn.net/lovesoo/article/details/78579547 Apache JMeter是一款纯java编写负载功能测试和性能测试开源工具软件。相比Loadrunner而言,JMeter小巧轻便且免费,逐渐成为了主流的性能测试工具,是每个测试人员都必须要掌握的工具之一。 本文为JMeter性能测试完整入门篇,从Jmeter下载安装到编写一个完整性能测试脚本、最终执行性能测试并分析性能测试结果。 运行环境为Windows 10系统,JDK版本为1.8,JMeter版本为3.3。 2. Jmeter安装 2.1 JDK安装 由于Jmeter是基于java开发,首先需要下载安装JDK (目前JMeter只支持到Java 8,尚不支持 Java 9) 1. 官网下载地址: http://www.oracle.com/technetwork/java/javase/downloads/index.html 2. 选择Java SE 8u151/ 8u152,点击JDK下载 3. 安装下载的JDK 4. 配置系统环境变量 2.2 JMeter安装 官网下载地址: http://jmeter.apache.org/download_jmeter.cgi 下载最新JMeter 3.3版本:apache-jmeter-3.3.zip

线程数究竟设多少合理

半城伤御伤魂 提交于 2019-11-30 06:10:41
转载: 2016-03-29 58沈剑 架构师之路 一、需求缘起 Web-Server通常有个配置, 最大工作线程数 ,后端服务一般也有个配置,工作线程池的 线程数量 ,这个线程数的配置不同的业务架构师有不同的经验值,有些业务设置为CPU核数的2倍,有些业务设置为CPU核数的8倍,有些业务设置为CPU核数的32倍。 “工作线程数”的设置依据是什么,到底设置为多少能够最大化CPU性能,是本文要讨论的问题。 二、一些共性认知 在进行进一步深入讨论之前,先以提问的方式就一些共性认知达成一致。 提问:工作线程数是不是设置的越大越好? 回答:肯定不是的 1)一来服务器CPU核数有限,同时并发的线程数是有限的,1核CPU设置10000个工作线程没有意义 2)线程切换是有开销的,如果线程切换过于频繁,反而会使性能降低 提问:调用sleep() 函数的时候,线程是否一直占用CPU ? 回答:不占用,等待时会把CPU让出来,给其他需要CPU资源的线程使用 不止调用sleep()函数,在进行一些阻塞调用,例如网络编程中的 阻塞 accept()【等待客户端连接】和 阻塞 recv()【等待下游回包】也不占用CPU资源 提问:如果CPU****是单核,设置多线程有意义么,能提高并发性能么? 回答:即使是单核,使用多线程也是有意义的 1)多线程编码可以让我们的服务/代码更加清晰,有些IO线程收发包

apache常用的两种工作模式 prefork和worker

梦想的初衷 提交于 2019-11-30 06:10:40
apache作为现今web服务器用的最广泛也是最稳定的开源服务器软件,其工作模式有许多中,目前主要有两种模式:prefork模式和worker模式 一、两种模式 prefork模式: prefork是Unix平台上的默认(缺省)MPM,使用多个子进程,每个子进程只有一个线程。每个进程在某个确定的时间只能维持一个连接, 效率高,但内存占用量比较大 。 这个多路处理模块(MPM)实现了一个非线程型的、预派生的web服务器,它的工作方式类似于Apache 1.3。 它适合于没有线程安全库,需要避免线程兼容性问题的系统 。它是要求将每个请求相互独立的情况下最好的MPM,这样若一个请求出现问题就不会影响到其他请求。 worker模式: worker使用多个子进程,每个子进程有多个线程,每个线程在某个确定的时间只能维持一个连接, 内存占用量比较小,适合高流量的http服务器 。缺点是假如一个线程崩溃,整个进程就会连同其任何线程一起”死掉”,所以要保证一个程式在运行时必须被系统识别为”每个线程都是安全的”。 此多路处理模块(MPM)使网络服务器支持混合的多线程多进程。由于使用线程来处理请求,所以可以处理海量请求,而系统资源的开销小于基于进程的MPM。但是它也使用了多进程,每个进程又有多个线程,以获得基于进程的MPM的稳定性。 二、apache模式的查看和安装 1、常看当前模式