线程

Jmeter学习总结【线程组】

旧巷老猫 提交于 2020-03-01 02:41:00
一、setup thread group和teardown thread group 对于setup thread group 和 teardown thread group 来说,从字面意思上来看就是安装线程组和卸载线程组,所以可以理解为对于线程组的初始化和完成时处理,set thread group是所有我们真正开始线程并发之前的准备工作,必须是在线程组开始之前完成的并且拥有自己独立的线程设置 setUp Thread Group & tearDown Thread Group: 继续:如果取样器里的执行出现错误失败的时候,请求不会停止,继续执行。 Start Next Thread Loop : 忽略错误,线程当前循环错误,执行下一个循环。 停止线程 : 只限当前线程停止,不影响其他线程执行 停止测试 : 当前执行的线程全部执行完毕后结束 Stop Test Now: 立刻停止 6、线程数=10(设置线程数),Ramp-Up Period(in seconds)=5(设置过渡时期),循环次数=2(设置执行测试的次数) 也就是说: 一共10个线程数,每1S执行2个线程数2个循环,也就是1S并发4个请求 二、线程组 每个线程将完全独立的执行测试计划,完全独立于其他测试线程,多个线程用于模拟与服务器应用程序的并发连接 这个过渡时期告诉JMeter要花多长时间才能“加速

netty—入门(一)

倾然丶 夕夏残阳落幕 提交于 2020-03-01 02:37:31
netty入门 一、介绍 netty是基于事件驱动的网络:例如一个server的请求要如何处理 netty是基于异步的(同步:发出请求一定要在获取到该请求的结果以后才能继续执行以下代码,异步则是发出请求以后,不需要等待,直接就可以继续执行以下代码) 1、netty认识 netty是基于TCP/ip协议,基于NIO架构 netty作为异步高并发通信中的应用中,其中AVRO是针对netty的二次封装。 2、I/O模型 I/O模型就是用什么样的通道进行数据的发送和接收 (1)BIO 同步并阻塞:一个连接就是一个线程,不适合高平发场景。适合连接数目小且固定的结构 (2)NIO(netty基础) 一个线程处理多个请求,有一个多路复用器,可以认为一个线程连接多个连接(这样可以处理多个连接)。适合连接数目多但是连接比较短的场景 (3)AIO 没有广泛的应用。适合连接数目多并且连接时间长的场景 2.1 BIO模型 可以t通过线程池机制改善(实现多个客户连接服务器,可高并发) (1)编程流程 a) 服务器启动一个serverSocket b)客户端启动socket对服务器进行通信。默认情况下服务器端需要对每个客户建立一个线程与之通信 c)客户端发出请求后,先咨询服务器是否有线程响应,如果没有则会等待或者被拒绝 d)如果有响应,客户端线程会等待情趣结束以后,再继续执行 (2)应用实例

进程与线程你真的了解吗?

拟墨画扇 提交于 2020-03-01 02:35:27
线程与进程 进程 计算机的核心是CPU,目前众多CPU已经是多核的 那么进程也就相应的包含了上图中的相关内容 内存 :这里的内存是逻辑内存。指的是内存的寻址空间。 每个进程的内存是相互独立的。 文件/网络句柄 :它们是所有的进程所共有的,例如打开同一个文件,去抢同一个网络的端口这样的操作是被允许的。 线程 :接下来我们会继续讲解 线程 它是进程执行任务的多个分支 那么线程也就相应的包含了上图中的相关内容 栈 :我们通常都是说调用堆栈,其实这里的堆是没有含义的,调用堆栈就是调用栈的意思。 那么我们的栈里面有什么呢? 我们从主线程的入口main函数,会不断的进行函数调用, 每次调用的时候,会把所有的参数和返回地址压入到栈中。 PC :(Program Counter) 程序计数器,操作系统真正运行的是一个个的线程, 而我们的进程是一个装线程的容器。PC就是指向当前的指令,而这个指令是放在内存中。 每个线程都有一串自己的指针,去指向自己当前所在内存的指针。 计算机绝大部分是存储程序性的,说的就是我们的数据和程序是存储在同一片内存里的 这个内存中既有我们的数据变量又有我们的程序。所以我们的PC指针就是指向我们的内存的。 ​ **缓冲区溢出:**从这里我们来引出一个概念就是缓冲区溢出,本来呢一个标准内存空间就那么大,而你呢,作为一 个小白,就想把信息填写的很满,超过了控件容量

Java多线程-工具篇-BlockingQueue

China☆狼群 提交于 2020-03-01 01:45:07
前言: 在新增的Concurrent包中,BlockingQueue很好的解决了多线程中,如何高效安全“传输”数据的问题。通过这些高效并且线程安全的队列类,为我们快速搭建高质量的多线程程序带来极大的便利。本文详细介绍了BlockingQueue家庭中的所有成员,包括他们各自的功能以及常见使用场景。 认识BlockingQueue 阻塞队列,顾名思义,首先它是一个队列,而一个队列在数据结构中所起的作用大致如下图所示: 从上图我们可以很清楚看到,通过一个共享的队列,可以使得数据由队列的一端输入,从另外一端输出; 常用的队列主要有以下两种:(当然通过不同的实现方式,还可以延伸出很多不同类型的队列,DelayQueue就是其中的一种)   先进先出(FIFO):先插入的队列的元素也最先出队列,类似于排队的功能。从某种程度上来说这种队列也体现了一种公平性。   后进先出(LIFO):后插入队列的元素最先出队列,这种队列优先处理最近发生的事件。 多线程环境中,通过队列可以很容易实现数据共享,比如经典的“生产者”和“消费者”模型中,通过队列可以很便利地实现两者之间的数据共享。假设我们有若干生产者线程,另外又有若干个消费者线程。如果生产者线程需要把准备好的数据共享给消费者线程,利用队列的方式来传递数据,就可以很方便地解决他们之间的数据共享问题。但如果生产者和消费者在某个时间段内

Java多线程学习(三)

为君一笑 提交于 2020-03-01 01:43:56
用关键字synchronized声明方法是有弊端的。 synchronized同步代码块的使用:当两个并发线程访问桶一个对象object中的synchronized(this)同步代码块是,一段时间内只能有一个线程被执行,另一个线程必须等待当前线程执行完这个代码块以后才能执行该代码块。 synchronized(this){ } 当一个线程访问object的一个synchronized同步代码块时,另一个线程仍然可以访问该object对象中的非synchronized(this)同步代码块。因此可以较同步方法提高效率。 object对象中的代码,不在synchronized块中就是异步执行,在synchronized块中就是同步执行。 synchronized代码块之间的同步性:在使用synchronized(this)同步代码块时需要注意的是,当一个线程访问object的一个synchronized(this)同步代码块时,其他线程对同一个object中所有其他synchronized(this)同步代码块的访问将被阻塞,这说明synchronized使用的对象监视器是同一个。必须等待当前synchronized(this)同步代码块执行完之后,才能访问其他的synchronized(this)同步代码块。 同synchronized方法一样,synchronized(this

netty的BossGroup线程做了什么

会有一股神秘感。 提交于 2020-03-01 01:30:25
netty的BossGroup线程做了什么 主从Reactor模型 一个MainReactor接受连接,其他的负责处理业务逻辑 netty的BossGroup netty的BossGroup有多个线程(也就是NioEventLoop),建立连接时会有一个线程负责accept,其他的线程负责业务处理。 当使用BossGroup和WorkerGroup两个线程池时,BossGroup的其他线程不会工作;但是当你的程序需要绑定其他端口时,又会从BossGroup里面拿出一个线程绑定其他端口。 来源: CSDN 作者: vitaminYZZ 链接: https://blog.csdn.net/weixin_44048823/article/details/104580678

响应式编程系列(一):什么是响应式编程?reactor入门

送分小仙女□ 提交于 2020-02-29 23:00:10
响应式编程 系列文章目录 (一)什么是响应式编程?reactor入门 (二)Flux入门学习:流的概念,特性和基本操作 (三)Flux深入学习:流的高级特性和进阶用法 (四)reactor-core响应式api如何测试和调试? (五)Spring reactive: Spring WebFlux的使用 (六)Spring reactive: webClient的使用 引言   Spring framework 5 的一大新特性:响应式编程(Reactive Programming)。那么什么是响应式?他能给我们带来什么?如何优雅地使用?本系列会从最基础的概念和简单的api讲起,再慢慢深入探讨响应式的一些高级特性,最后讲解实战内容,例如WebFlux和WebClient等在Spring boot中的使用,如何测试和调试。   想要了解原理的话,美团点评的这篇博客 Java NIO浅析 非常适合入门。 简单地说:   当我们调用socket.read()、socket.write()这类阻塞函数的时候,这类函数不能立即返回,也无法中断,需要等待socket可读或者可写,才会返回,因此一个线程只能处理一个请求。在这等待的过程中,cpu并不干活,(即阻塞住了),那么cpu的资源就没有很好地利用起来。因此对于这种情况,我们使用多线程来提高cpu资源的利用率:在等待的这段时间

一次Mariadb死锁排查过程回顾

我的梦境 提交于 2020-02-29 22:33:39
场景 在使用某个平台的时候,有些页面发现长时间,部分数据无法加载成功,开始排查问题。 确定是mariadb的问题的过程 访问了几个页面都是正常的,唯独某几个页面查询实时监控数据时无法加载出来, F12 查看接口发现有几个业务相似的接口长时间不返回数据。 既然整体功能是正常的,只有部分页面出现问题,而且都是实时数据无法显示,怀疑是同一个地方出现问题,于是把接口放在一起发现共同点。 都是 timeout 长时间无响应,而且不是前端资源加载的问题, F12 可以看到一个接口的请求过程,例如下图 查看代码逻辑 ,发现几个接口同时查询过一个表,登陆 mariadb ,发现 SELECT 长时间不返回。怀疑是锁表了。 以下所有示例使用 docker 启动 mysql 演示复现。 我先锁表 lock table test read; lock table test write; 发现是卡住了 mysql> select * from test; mysql> 2013 - Lost connection to MySQL server during query 查看长时间卡住的线程 查询进程(如果您有SUPER权限,您可以看到所有线程。否则,您只能看到您自己的线程) show processlist; 但是此命令只能显示前100条数据,要想看全部的数据,请输入 show full

jvm8内存模型和内存分配

不打扰是莪最后的温柔 提交于 2020-02-29 22:17:59
   在JVM中,是通过线程轮流切换时间来获得CPU,因此在同一刻时间,一个CPU只能执行一条线程命令    1.java中内存的分布?   JVM 执行的过程。①加载class文件 ②管理并分配内存 ③执行垃圾收集   内存结构图:      栈   java栈中,存放一个个栈帧,每一个栈帧对应一个被调用方法,在栈帧中包含局部变量表、操作数栈、指向运行时常量池的引用,方法的返回地址,和一些附加信息,   方法执行完毕之后,便会将栈帧出栈。当一个新的线程被创建时,java虚拟机会分配一个虚拟机栈,每一个线程都拥有一个栈,虚拟机栈式以栈帧的形式存在,每一个方法都有自己唯一的常量池       堆   java中堆是用来存放对象本身和数组,堆被所有的线程共享,在JVM中,只有一个堆。就是存放对象实例的区域。JVM8中把运行时常量池、静态变量也移到堆区进行存储   方法区   和堆一样,被所有的线程共享,在方法区中,存储每一个类的信息,包括方法名称、方法信息、静态变量、常量以及编译后的代码。   在方法区中,有一个非常重要的部分,就是运行时常量池,它是每一个类和接口的常量运行时表示形式,在类和接口被加载到JVM后,   对应的运行常量池就会被创建,当然并非class文件常量池的内容才能进入运行常量池,在运行期间,可将新的常量放入到常量池中。   虚拟机中提供了参数,来控制堆和方法区的大小

系统性能--CPU

主宰稳场 提交于 2020-02-29 21:55:15
对于cpu,目前比较关心的是cpu的利用率还有cpu的load,或者还有cpu运行队列。 cpu利用率 cpu利用率分为sys,us。分别为操作系统和用户进程所占用的cpu利用率。sys的占用,一般是进行内核操作,比如线程的调度,网络请求等操作。cpu利用率是指一段时间内,对cpu占用的时间比。比如30% ,如果是已1m为单位统计的,就是说1m内有60*0.3s的cpu占用。 通常来说,cpu利用率是越高越好,因为这意味着cpu资源可以充分被利用,计算任务可以快速被计算完成。当然这不是绝对的,也有可能是程序有问题,在空吃cpu,所以还是需要具体分析cpu到底在执行什么任务。放在线上服务的场景下,也并不意味着我们要把cpu的利用率达到很高,因为这意味着空闲cpu资源很少,如果线上有大的请求波动的话,会造成故障。 cpu的空闲可能有三个原因造成: 1. 线程在等待外部资源,比如网络返回。 2.线程被阻塞,比如在等锁的释放等。 3.线程真的很闲 查看cpu利用率方法:top , vmstat 1, top -p pid -H (可以查看一个进程下的线程的cpu占用) cpu Load cpuLoad是指一段时间内,cpu正在处理和等待处理的任务的总和(我认为至少不是进程维度的)。 一般来说,cpu的load不宜过大,最大不应该操作系统的内核数(逻辑cpu数, 逻辑cpu数=物理CPU个数