异步调用

阻塞 非阻塞 同步 异步

别来无恙 提交于 2019-12-05 17:23:57
阻塞 ​ 调用结果返回之前, 当前线程会被挂起(如遇到IO操作). 函数只有在得到结果之后才会将阻塞的线程激活. 非阻塞 ​ 和阻塞的概念相对应, 指在不能立即得到结果之前也会立刻返回, 同时该函数不会阻塞当前线程 同步 ​ 在一个功能调用时, 在没有得到结果之前, 该调用就不会返回 异步 ​ 和同步相对, 当一个异步功能调用发出后, 调用者不能立刻得到结果. 总结 ​ 同步与异步针对的是函数/任务的调用方式: 同步就是当一个进程发起一个函数(任务)调用的时候, 一直等到函数(任务)完成, 而进程继续处于激活状态. 而异步情况下是当一个进程发起一个函数(任务)调用的时候, 不会等函数返回, 而是继续往下执行, 函数返回的时候通过状态, 通知, 事件等方式通知进程任务完成 ​ 阻塞与非阻塞针对的是进程或线程: 阻塞是当请求不能满足的时候就将进程挂起, 而非阻塞则不会阻塞当前进程 同步调用 异步调用 同步调用 ​ apply 一个累计1亿次的任务, 该调用会一直等待, 知道任务返回结果为止, 但并未阻塞住(即便是被抢走CPU的执行权限, 那也是处于就绪状态) from concurrent.futures import ProcessPoolExecutor, ThreadPoolExecutor import time import os import random def task

ajax

筅森魡賤 提交于 2019-12-05 11:49:27
ajax的实现过程: 1.创建XMLHttpRequest对象,也就是创建一个异步调用对象 2.创建一个新的HTTP请求,并指定这个请求的方法 URL 及验证信息 3.设置相应HTTP请求状态变化的函数 4.发送请求 5获取异步调用返回的数据 6使用JavaScript和DOM实现局部刷新。 来源: https://www.cnblogs.com/2507148161----com/p/11923299.html

Spring Boot(一)

扶醉桌前 提交于 2019-12-04 15:44:24
@EnableJpaAuditing 审计功能(启动类配置) 在实际的业务系统中,往往需要记录表数据的创建时间、创建人、修改时间、修改人。 每次手动记录这些信息比较繁琐,SpringDataJpa 的审计功能可以帮助我们来做这些繁琐的配置。 1. 在 spring jpa 中,支持在字段或者方法上进行注解: @CreatedDate、@CreatedBy、 @LastModifiedDate、@LastModifiedBy @CreatedDate: 表示该字段为创建时间时间字段,在这个实体被insert的时候,会设置值 @CreatedBy: 表示该字段为创建人,在这个实体被insert的时候,会设置值 2. 在类上加上注解 @EntityListeners(AuditingEntityListener.class) 3. 在 application启动类 中加上注解 @EnableJpaAuditing 4. 这个时候,在jpa的save方法被调用的时候,时间字段会自动设置并插入数据库, 但是CreatedBy和LastModifiedBy并没有赋值,因为需要实现AuditorAware接口来返回你需要插入的值。 @Configuration //使用jpa审计功能,保存数据时自动插入创建人id和更新人id public class UserAuditorAware

全链路压测经验(转载二)

痞子三分冷 提交于 2019-12-04 08:50:53
PS :主要罗列的是问题点,以及对应的一些解决方案,仅供参考。。。 相关链接: 阿里全链路压测 有赞全链路压测 京东全链路压测 饿了么全链路压测 滴滴全链路压测解决之道 美团全链路压测自动化实践 逻辑思维在全链路压测方面的实践 一、什么是全链路压测 基于实际的生产业务场景、系统环境,模拟海量的用户请求和数据对整个业务链进行压力测试,并持续调优的过程。 二、全链路压测解决什么问题 针对业务场景越发复杂化、海量数据冲击下整个业务系统链的可用性、服务能力的瓶颈,让技术更好的服务业务,创造更多的价值。 三、面对的问题点以及解决方案 1、业务模型梳理 首先应该明确的是:全链路压测针对的是现代越来越复杂的业务场景和全链路的系统依赖。所以首先应该将核心业务和非核心业务进行拆分,确认流量高峰针对的是哪些业务场景和模块, 针对性的进行扩容准备,而不是为了解决海量流量冲击而所有的系统服务集群扩容几十倍,这样会造成不必要的成本投入。 2、数据模型构建 数据构建和准备,应该考虑这几点问题: ①、数据的真实性和可用性 可以从生产环境完全移植一份当量的数据包,作为压测的基础数据,然后基于基础数据,通过分析历史数据增长趋势,预估当前可能的数据量; ②、数据脱敏 基于生产环境的全链路压测,必须考虑的一点是不能产生脏数据,以免对生产造成影响,影响用户体验等,因此在数据准备时需要进行数据脱敏; ③、数据隔离 同样

SpringBoot ――异步调用Async

匿名 (未验证) 提交于 2019-12-03 00:37:01
什么是异步调用? 异步调用是相对于同步调用而言的,同步调用是指程序按预定顺序一步步执行,每一步必须等到上一步执行完后才能执行,异步调用则无需等待上一步程序执行完即可执行。 如何实现异步调用? 多线程,这是很多人第一眼想到的关键词,没错,多线程就是一种实现异步调用的方式。 在非spring目项目中我们要实现异步调用的就是使用多线程方式,可以自己实现Runable接口或者集成Thread类,或者使用jdk1.5以上提供了的Executors线程池。 StrngBoot中则提供了很方便的方式执行异步调用。 按照官方示例开撸 代码入下 maven依赖: <parent> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-parent</artifactId> <version> 1.5 .3.RELEASE</version> </parent> <dependencies> <dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-web</artifactId> </dependency> </dependencies> 启动类:添加@EnableAsync注解

RPC服务和HTTP服务

匿名 (未验证) 提交于 2019-12-03 00:19:01
本文简单地介绍一下两种形式的C/S架构,先说一下他们最本质的区别,就是 RPC主要是基于TCP/IP协议的,而HTTP服务主要是基于HTTP协议的 ,我们都知道HTTP协议是在传输层协议TCP之上的,所以效率来看的话,RPC当然是要更胜一筹啦!下面来具体说一说RPC服务和HTTP服务。 OSI网络七层模型 在说RPC和HTTP的区别之前,我觉的有必要了解一下OSI的七层网络结构模型(虽然实际应用中基本上都是五层),它可以分为以下几层: (从上到下) 第一层:应用层。定义了用于在网络中进行通信和传输数据的接口; 第二层:表示层。定义不同的系统中数据的传输格式,编码和解码规范等; 第三层:会话层。管理用户的会话,控制用户间逻辑连接的建立和中断; 第四层:传输层。管理着网络中的端到端的数据传输; 第五层:网络层。定义网络设备间如何传输数据; 第六层:链路层。将上面的网络层的数据包封装成数据帧,便于物理层传输; 第七层:物理层。这一层主要就是传输这些二进制数据。 实际应用过程中,五层协议结构里面是没有表示层和会话层的。应该说它们和应用层合并了。我们应该将重点放在应用层和传输层这两个层面。因为 HTTP是应用层协议,而TCP是传输层协议 。好,知道了网络的分层模型以后我们可以更好地理解为什么RPC服务相比HTTP服务要Nice一些! TCP(Transmission Control

C#入门详解(10)

匿名 (未验证) 提交于 2019-12-02 23:40:02
什么是委托 委托是函数指针的升级版 实例:C/C++中的函数指针 一切皆地址 变量(数据)是以莫个地址为起点的一段内存中所存储的值 函数(算法)是以莫个地址为七点的一段内存中所存储的一组机器语言指令 直接调用与间接调用 直接调用:通过函数名来调用函数,CPU是通过函数名来直接获取函数所在的地址并开始执行-》返回 间接调用:通过函数指针来调用函数,CPU通过读取函数指针存储的值来获得函数所在地址并开始执行-》返回 委托的简单使用 Action委托 Func委托 委托的声明 委托是一种类,类是数据类型,所以委托也是一种数据类型 它的声明方式与一般类不同,主要是为了照顾可读性 注意声明委托的位置 避免写错地方结果声明成嵌套类型 委托与所封装的方法必须类型兼容 返回值的数据类型一致 参数列表在个数和数据类型上一致(参数名不需要一样) 委托的使用 实例:把方法当作参数传给另一个方法 正确使用1:模板方法:借用指定的外部方法来产生结果 相当于填空题 常位于代码中部 委托有返回值 正确使用2:回调方法:调用制定的外部方法 相当于流水线 常位于代码尾部 委托无返回值 注意:难精通+易使用+功能强大的东西,一旦被滥用则后果非常严重 缺点1:这是一种方法级别的紧耦合,现实工作中要慎之又慎 缺点2:使可读性下降,debug的难度增加 缺点3:把委托回调,异步调用和多线程纠缠在一起

第 5 章 Nova - 025 - OpenStack 通用设计思路

匿名 (未验证) 提交于 2019-12-02 23:39:01
API 前端服务 每个 OpenStack 组件可能包含若干子服务,其中必定有一个 API 服务负责接收客户请求。 以 Nova 为例 nova-api 作为 Nova 组件对外的唯一窗口,向客户暴露 Nova 能够提供的功能。 当客户需要执行虚机相关的操作,能且只能向 nova-api 发送 REST 请求。 这里的客户包括终端用户、命令行和 OpenStack 其他组件。 设计 API 前端服务的好处在于: 1、对外提供统一接口,隐藏实现细节 2、API 提供 REST 标准调用服务,便于与第三方系统集成 3、可以通过运行多个 API 服务实例轻松实现 API 的高可用,比如运行多个 nova-api 进程 Scheduler 调度服务 对于某项操作,如果有多个实体都能够完成任务,那么通常会有一个 scheduler 负责从这些实体中挑选出一个最合适的来执行操作。 以 Nova 为例 Nova 有多个计算节点。 当需要创建虚机时,nova-scheduler 会根据计算节点当时的资源使用情况选择一个最合适的计算节点来运行虚机。 调度服务好比是开发团队中的项目经理,当接到新的开发任务后,项目经理会评估任务的难度,考察团队成员目前的工作负荷和技能水平,然后将任务分配给最合适的开发人员。 除了 Nova,块服务组件 Cinder 也有 scheduler 子服务。 Worker

node文件操作同步或异步调用

匿名 (未验证) 提交于 2019-12-02 23:38:02
同步或异步调用 fs模块对文件的几乎所有操作都有同步和异步两种形式 例如:readFile() 和 readFileSync() 区别: 同步调用会阻塞代码的执行,异步则不会 异步调用会将读取任务下达到任务队列,直到任务执行完成才会回调 异常处理方面,同步必须使用 try catch 方式,异步可以通过回调函数的第一个参数 console . time ( 'sync' ) ; try { var data = fs . readFileSync ( path . join ( 'C:\\Users\\iceStone\\Downloads' , 'H.mp4' ) ) ; // console.log(data); } catch ( error ) { throw error ; } console . timeEnd ( 'sync' ) ; console . time ( 'async' ) ; fs . readFile ( path . join ( 'C:\\Users\\iceStone\\Downloads' , 'H.mp4' ) , ( error , data ) => { if ( error ) throw error ; // console.log(data); } ) ; console . timeEnd ( 'async' ) ; 文章来源:

JS回调函数是异步调用 记录踩到的坑

匿名 (未验证) 提交于 2019-12-02 23:03:14
今天正好公司停电,放假一天,准备听课封装一下用nodejs操作 MongoDB数据库的方法来着, 然后我就掉坑里了 记录一下吧 首先说一下环境,我用的是nodejs 操作MongoDB数据库用的包是mongodb 第一步,按部就班的写一下,找到数据库和集合,准备操作; // 加载mongodb包 var mongodb = require("mongodb"); // 连接客户端 var mongoClient = mongodb.MongoClient; // 准备地址 var url = "mongodb://127.0.0.1:27017"; // 连接客户端 mongoClient.connect(url, function (err, client) { // 检测错误 if (err) { console.log("** 数据库连接失败 **"); } else { console.log("** 数据库连接成功 **"); // 操作 var db = client.db("db1811"); // 数据库 var collection = db.collection("person"); // 集合 // 增删改查操作 client.close(); // 关闭连接 } }) 二、我将查询数据的方法,抽取出来了 方法说明: 参数1 是集合对象,也就是要查询的集合;