线程

I/O 模型

余生长醉 提交于 2020-03-19 02:40:20
2018-01-29 一、基本概念: 同步与异步 区别:多个任务和事件发生时,一个事件的发生或执行是否会导致整个流程的暂时等待。 阻塞与非阻塞: 区别:当发出请求一个操作时,如果条件不满足,是会一直等待还是返回一个标志信息 阻塞IO:当用户线程发出IO请求之后,内核会去查看数据是否就绪,如果没有就绪就会等待数据就绪,而用户线程就会处于阻塞状态,用户线程交出CPU。当数据就绪之后,内核会将数据拷贝到用户线程,并返回结果给用户线程,用户线程才解除block状态。 非阻塞IO: 当用户线程发起一个read操作后,它马上就得到了一个结果。如果结果是一个error时,它就知道数据还没有准备好,于是它可以再次发送read操作。一旦内核中的数据准备好了,并且又再次收到了用户线程的请求,那么它马上就将数据拷贝到了用户线程,然后返回。 所以在非阻塞IO模型中,用户线程需要不断地询问内核数据是否就绪,也就说非阻塞IO不会交出CPU,而会一直占用CPU。 同步IO 与 异步IO 区别:同步IO和异步IO的关键区别反映在数据拷贝阶段是由用户线程完成还是内核完成。所以说异步IO必须要有操作系统的底层支持。 同步io:如果数据没有就绪,需要通过用户线程或者内核不断地去轮询数据是否就绪,当数据就绪时,再将数据从内核拷贝到用户线程。 异步io:IO操作的两个阶段都是由内核自动完成

Java I/O模型的简单说明

∥☆過路亽.° 提交于 2020-03-19 02:39:21
  1、同步和异步   同步:如果有多个任务或者事件要发生,这些任务或者事件必须逐个地进行,一个事件或者任务的执行会导致整个流程的暂时等待,这些事件没有办法并发地执行,最简单的例子就是顺序的执行两个方法,当第一个方法正在执行时,那么第二个方法需要等待第一个方法执行完毕后才能继续执行   异步:如果有多个任务或者事件发生,这些事件可以并发地执行,一个事件或者任务的执行不会导致整个流程的暂时等待,在Java中最常见的就是多线程来实现异步,执行一个方法的同时,开另外一个线程同时执行其他事情   2、阻塞和非阻塞   阻塞:当某个事件或者任务在执行过程中,它发出一个请求操作,但是由于该请求操作需要的条件不满足,那么就会一直在那等待,直至条件满足,比如实现一个功能是读取指定目录下的文件的内容,如果文件不存在,那么程序将无限循环的进行读取,比如每隔3s继续读一次,就好像服务器一样一直在后台以服务形式运行着   非阻塞:当某个事件或者任务在执行过程中,它发出一个请求操作,如果该请求操作需要的条件不满足,会立即返回一个标志信息告知条件不满足,不会一直在那等待,比如也是读取一个目录下指定文件,如果文件读取到,则返回文件的内容给程序,如果不存在则返回相应的状态,这段程序到这里就执行完毕了   同步、异步和阻塞、非阻塞之间没有必然联系,更不能划等号,   3、阻塞IO和非阻塞IO  

Java NIO:浅析I/O模型

ぃ、小莉子 提交于 2020-03-19 02:33:30
以下是本文的目录大纲:   一.什么是同步?什么是异步?   二.什么是阻塞?什么是非阻塞?   三.什么是阻塞IO?什么是非阻塞IO?   四.什么是同步IO?什么是异步IO?   五.五种IO模型   六.两种高性能IO设计模式 一.什么是同步?什么是异步?   同步和异步的概念出来已经很久了,网上有关同步和异步的说法也有很多。以下是我个人的理解:   同步就是:如果有多个任务或者事件要发生,这些任务或者事件必须逐个地进行,一个事件或者任务的执行会导致整个流程的暂时等待,这些事件没有办法并发地执行;   异步就是:如果有多个任务或者事件发生,这些事件可以并发地执行,一个事件或者任务的执行不会导致整个流程的暂时等待。   这就是同步和异步。举个简单的例子,假如有一个任务包括两个子任务A和B,对于同步来说,当A在执行的过程中,B只有等待,直至A执行完毕,B才能执行;而对于异步就是A和B可以并发地执行,B不必等待A执行完毕之后再执行,这样就不会由于A的执行导致整个任务的暂时等待。   如果还不理解,可以先看下面这2段代码: 1 2 3 4 5 6 7 8 9 10 11 12 13 14 void fun1() { } void fun2() { } void function(){ fun1(); fun2() ..... ..... }   这段代码就是典型的同步

Java NIO:浅析I/O模型

試著忘記壹切 提交于 2020-03-19 02:31:59
学习Java的同学注意了!!! 学习过程中遇到什么问题或者想获取学习资源的话,欢迎加入Java学习交流群:618528494 我们一起学Java!   也许很多朋友在学习NIO的时候都会感觉有点吃力,对里面的很多概念都感觉不是那么明朗。在进入Java NIO编程之前,我们今天先来讨论一些比较基础的知识:I/O模型。下面本文先从同步和异步的概念 说起,然后接着阐述了阻塞和非阻塞的区别,接着介绍了阻塞IO和非阻塞IO的区别,然后介绍了同步IO和异步IO的区别,接下来介绍了5种IO模型,最后介绍了两种和高性能IO设计相关的设计模式(Reactor和Proactor)。   以下是本文的目录大纲:   一.什么是同步?什么是异步?   二.什么是阻塞?什么是非阻塞?   三.什么是阻塞IO?什么是非阻塞IO?   四.什么是同步IO?什么是异步IO?   五.五种IO模型   六.两种高性能IO设计模式   若有不正之处,请多多谅解并欢迎批评指正。 一.什么是同步?什么是异步?   同步和异步的概念出来已经很久了,网上有关同步和异步的说法也有很多。以下是我个人的理解:   同步就是:如果有多个任务或者事件要发生,这些任务或者事件必须逐个地进行,一个事件或者任务的执行会导致整个流程的暂时等待,这些事件没有办法并发地执行;   异步就是:如果有多个任务或者事件发生,这些事件可以并发地执行

jmeter测试结果分析

ぃ、小莉子 提交于 2020-03-19 01:51:21
参数 ramp-up period 用于告知JMeter 要在多长时间内建立全部的线程。默认值是0。如果未指定ramp-up period ,也就是说ramp-up period 为零, JMeter 将立即建立所有线程,假设ramp-up period 设置成T 秒, 全部线程数设置成N个, JMeter 将每隔T/N秒建立一个线程。 我们可以看到,通过这份报告我们就可以得到通常意义上性能测试所最关心的几个结果了。 Samples -- 本次场景中一共完成了多少个Transaction Average -- 平均响应时间 Median -- 统计意义上面的响应时间的中值 90% Line -- 所有transaction中90%的transaction的响应时间都小于xx Min -- 最小响应时间 Max -- 最大响应时间 PS: 以上时间的单位均为ms Error -- 出错率 Troughput -- 吞吐量,单位:transaction/sec KB/sec -- 以流量做衡量的吞吐量 图形结果树:以结果树的形式显示测试结果。 Thread Name: 线程组名称 Sample Start: 启动开始时间 Load time: 加载时长 Latency: 等待时长 Size in bytes: 发送的数据总大小 Headers size in bytes: 发送头大小

多线程

一曲冷凌霜 提交于 2020-03-19 01:34:33
多线程 进程:进程指正在运行的程序 线程:是进程中的一个执行单元,负责当前进程中程序的执行,一个进程中至少有一个线程。一个线程中是可以有多个线程的,这个应用程序也可以被称为多线程程序。 一个程序运行后至少有一个进程,一个进程中可以包含多个线程 举例: 单线程程序:即,若有多个任务只能依次执行。当上一个任务执行结束后,下一个任务开始执行。 如,去网吧上网,网吧只能让一个人上网,当这个人下机后,下一个人才能上网。 多线程程序:即,若有多个任务可以同时执行。如,去网吧上网,网吧能够让多个人同时上网。 程序运行原理 分时调度 所有线程轮流使用 CPU 的使用权,平均分配每个线程占用 CPU 的时间。 抢占式调度 优先让优先级高的线程使用 CPU,如果线程的优先级相同,那么会随机选择一个(线程随机性),Java使用的为抢占式调度。   主线程 代码演示: 1 class Demo{ 2 String name; 3 Demo(String name){ 4 this.name = name; 5 } 6 void show() { 7 for (int i=1;i<=10000 ;i++ ) { 8 System.out.println("name="+name+",i="+i); 9 } 10 } 11 } 12 13 class ThreadDemo { 14 public static

mysql 查询正在执行的事务以及等待锁 常用的sql语句

青春壹個敷衍的年華 提交于 2020-03-19 00:20:08
使用navicat测试学习: 首先使用set autocommit = 0;(取消自动提交,则当执行语句commit或者rollback执行提交事务或者回滚) 在打开一个执行update 查询 正在执行的事务: SELECT * FROM information_schema.INNODB_TRX 根据这个事务的线程ID(trx_mysql_thread_id): 从上图看出对应的mysql 线程:一个94362 (第二个正在等待锁)另一个是93847(第一个update 正在执行 没有提交事务) 可以使用mysql命令:kill 线程id 杀掉线程 期间如果并未杀掉持有锁的线程:则第二个update语句提示等待锁超时 查询mysql数据库中还可以使用: 查看正在锁的事务 SELECT * FROM INFORMATION_SCHEMA.INNODB_LOCKS; 查看等待锁的事务 SELECT * FROM INFORMATION_SCHEMA.INNODB_LOCK_WAITS; 查询mysql数据库中存在的进程 [sql] view plain copy select * from information_schema.`PROCESSLIST`(show processlist;) 概念: mysql中database、instance、session。

并发编程之多线程

主宰稳场 提交于 2020-03-18 22:51:00
一,什么是线程   在传统操作系统中,每个进程有一个地址空间,而且默认就有一个控制线程   线程顾名思义,就是一条流水线工作的过程(流水线的工作需要电源,电源就相当于cpu),而一条流水线必须属于一个车间,一个车间的工作过程是一个进程,车间负责把资源整合到一起,是一个资源单位,而一个车间内至少有一条流水线。   所以,进程只是用来把资源集中到一起(进程只是一个资源单位,或者说资源集合),而线程才是cpu上的执行单位。   多线程(即多个控制线程)的概念是,在一个进程中存在多个线程,多个线程共享该进程的地址空间,相当于一个车间内有多条流水线,都共用一个车间的资源。例如,北京地铁与上海地铁是不同的进程,而北京地铁里的13号线是一个线程,北京地铁所有的线路共享北京地铁所有的资源,比如所有的乘客可以被所有线路拉。 二,线程和进程的区别 Threads share the address space of the process that created it; processes have their own address space. Threads have direct access to the data segment of its process; processes have their own copy of the data segment of the parent

线程的运行原理

别说谁变了你拦得住时间么 提交于 2020-03-18 22:50:03
一、栈与栈帧 Java Virtual Machine Stacks (Java 虚拟机栈) 我们都知道 JVM 中由堆、栈、方法区所组成,其中栈内存是给谁用的呢?其实就是线程,每个线程启动后,虚拟 机就会为其分配一块栈内存。 每个栈由多个栈帧(Frame)组成,对应着每次方法调用时所占用的内存 每个线程只能有一个活动栈帧,对应着当前正在执行的那个方法 二、运行过程 public static void main(String[] args) { method1(10); } static void method1(int x) { int y = x + 1; Object m = method2(); System.out.printf(m.toString()); } static Object method2() { Object n = new Object(); return n; } } 1.将编译好的字节码加载到jvm的方法区内存中 2.jvm启动一个main的主线程,cpu核心就准备运行主线程的代码了, 给主线程分配自己的栈内存【args、局部变量、返回地址、所记录】,每个线程的栈里面还有个程序计数器 程序计数器的作用:当cpu要执行哪行代码了,就去这个里面去要 3.把主方法的里面代码行放到程序计数器 4.主方法调用的是method1的方法

1.python进程、线程、多线程

无人久伴 提交于 2020-03-18 22:01:05
2018-07-16 1. 进程 简单理解 :进程就是一段程序执行的过程。 广义理解 :进程就是一个具有一定独立功能的程序关于某个数据集合的一次运行活动。 进程是 cpu调度 和分配的基本的分配单元,也是基本的执行单元。 进程的状态: 就绪 : 获取cpu外的所有资源,只要分配资源就可以马上执行。        运行 : 获得了分配的资源,程序开始执行。        阻塞 : 条件不满足时,等待满足时才执行。 一个进程在运行期间,不断地从一种状态转换到另一种状态,它可以多次处于就绪状态和执行状态,也可以多次处于阻塞状态。 1.就绪→执行 处于就绪状态的进程,当进程调度程序为之分配了处理机后,该进程便由就绪状态转变成执行状态。 2. 执行→就绪 处于执行状态的进程在其执行过程中,因分配给它的一个时间片已用完而不得不让出处理机,于是进程从执行状态转变成就绪状态。 3. 执行→阻塞 正在执行的进程因等待某种事件发生而无法继续执行时,便从执行状态变成阻塞状态。 4. 阻塞→就绪 处于阻塞状态的进程,若其等待的事件已经发生,于是进程由阻塞状态转变为就绪状态。 2. 线程 理解:一个进程可以包含若干个进程,一个进程至少有一个线程。线程可以利用进程所拥有的资源,在引入线程的操作系统中,把进程作为分配资源的基本单位,线程作为独立运行和调度的基本单位,相比进程而言线程调度资源消耗小