async

RedisHelper

跟風遠走 提交于 2020-01-07 13:22:53
/// <summary> /// Redis 助手 /// </summary> public class RedisHelper { private static RedisHelper _instance; public static RedisHelper GetInstance(string defaultKey = "") { _defaultKey = defaultKey; return _instance ?? (_instance = new RedisHelper()); } /// <summary> /// 连接字符串 /// </summary> private static readonly string ConnectionString; /// <summary> /// redis 连接对象 /// </summary> private static IConnectionMultiplexer _connMultiplexer; /// <summary> /// 默认的 Key 值(用来当作 RedisKey 的前缀) /// </summary> private static string _defaultKey = string.Empty; /// <summary> /// 锁 /// </summary> private

Spring中@Configuration@EnableAsync@Async用法总结

只愿长相守 提交于 2020-01-07 09:27:49
【推荐】2019 Java 开发者跳槽指南.pdf(吐血整理) >>> 引言: 在 Java 应用中,绝大多数情况下都是通过同步的方式来实现交互处理的;但是在处理与第三方系统交互的时候,容易造成响应迟缓的情况,之前大部分都是使用多线程来完成此类任务,其实,在 spring 3.x之后,就已经内置了@Async来完美解决这个问题,本文将完成介绍@Async的用法。 1. 何为异步调用? 在解释异步调用之前,我们先来看同步调用的定义;同步就是整个处理过程顺序执行,当各个过程都执行完毕,并返回结果。 异步调用则是只是发送了调用的指令,调用者无需等待被调用的方法完全执行完毕;而是继续执行下面的流程。 例如, 在某个调用中,需要顺序调用 A, B, C三个过程方法;如他们都是同步调用,则需要将他们都顺序执行完毕之后,方算作过程执行完毕; 如B为一个异步的调用方法,则在执行完A之后,调用B,并不等待B完成,而是执行开始调用C,待C执行完毕之后,就意味着这个过程执行完毕了。 2. 常规的异步调用处理方式 在Java中,一般在处理类似的场景之时,都是基于创建独立的线程去完成相应的异步调用逻辑,通过主线程和不同的线程之间的执行流程,从而在启动独立的线程之后,主线程继续执行而不会产生停滞等待的情况。 3. @Async介绍 在Spring中,基于@Async标注的方法,称之为异步方法

C# async await 死锁问题总结

為{幸葍}努か 提交于 2020-01-06 20:39:44
可能发生死锁的程序类型 1、WPF/WinForm程序 2、asp.net (不包括asp.net core)程序 死锁的产生原理 对异步方法返回的Task调用Wait()或访问Result属性时,可能会产生死锁。 下面的WPF代码会出现死锁: private void Button_Click_7(object sender, RoutedEventArgs e) { Method1().Wait(); } private async Task Method1() { await Task.Delay(100); txtLog.AppendText("后续代码"); } 下面的asp.net mvc代码也会出现死锁: public ActionResult Index() { string s=Method1().Result; return View(); } private async Task<string> Method1() { await Task.Delay(100); return "hello"; } 以WPF代码为例,事件处理器调用Method1,得到Task对象,然后调用Task的Wait方法,阻塞自己所在的线程,即主线程,直到Task对象“完成”。而返回的Task对象要想“完成”,必须在主线程上执行await之后的代码。而主线程早就处于阻塞状态

京东商品自动下单

三世轮回 提交于 2020-01-06 14:56:43
在现在,商家一年不卖货,双11卖出一年的货是大家都知道的事实了,总得来说调一调蚊子腿的价格,聊胜于无,但是也会有些神价格会出现,这时候买到就是赚到 本来是想趁着双11组台电脑,买个 Z370 的板U套装,没想到京东的 8700k 一直是无货的状态,这几天有货了,价格涨到了3999,简直不能忍,看了下板U套装比较划算,但是有些板U套装是不支持自动下单的,所以 gayhub 搜搜看有没有爬虫可以监听到货自动下单的,正好有了这哥们的 jd-autobuy Python 脚本,还有 Go 的,看了下接口已经很齐全了,来个 node 版本的助助兴 这次用到的 http 库是 axios ,支持客户端和服务端,总得来说语法还是很简洁的,在这之前还有个 superagent 库,看了下也差不多,只不过 superagent 在 response 上多处理了下 因为在 vue 中使用了 axios,这次想试试服务端的能力咋样,还是一如既往的好,滋次一波 先写个 request header ,毕竟是服务端,没有浏览器帮你处理 User-Agent,所以自己去浏览器请求下然后把 header 拿到 const defaultInfo = { header: { 'User-Agent': 'Mozilla/5.0 (Macintosh; Intel Mac OS X 10_13_0)

RocketMQ多Master多Slave模式部署

南笙酒味 提交于 2020-01-06 07:17:45
每个 Master 配置一个 Slave,有多对Master-Slave,HA采用同步双写方式,主备都写成功,向应用返回成功。 优点:数据与服务都无单点,Master宕机情况下,消息无延迟,服务可用性与数据可用性都非常高。 缺点:性能比异步复制模式略低,大约低10%左右,发送单个消息的RT会略高。目前主宕机后,备机不能自动切换为主机,后续会支持自动切换功能。 ### 先启动 NameServer ### 在机器 A,启动第一个 Master ### 在机器 B,启动第二个 Master ### 在机器 C,启动第一个 Slave ### 在机器 D,启动第二个 Slave 以上 Broker 与 Slave 配对是通过指定相同的brokerName 参数来配对,Master的 BrokerId 必须是 0,Slave 的BrokerId 必须是大与 0 的数。 另外一个 Master 下面可以挂载多个 Slave,同一 Master 下的多个 Slave通过指定不同的 BrokerId来区分。 1. 服务器环境如下图所示 ,四台机器,IP位7为主节点,149是7的从节点。105是主节点,160是105的从节点 序号 IP 用户名 角色 模式 1 192.168.1.7 root nameServer1,brokerServer1 Master1 2 192.168.1.105

Node.js学习笔记

南楼画角 提交于 2020-01-05 04:50:55
1.1. Part 0 :Node.js简介 1.1.1. a)Node.js简介 Node.js不是一门语言也不是框架,他只是基于Google V8引擎的JavaScript运行时环境,同时结合Libuv扩展了JavaScript功能,使之支持io、fs等只有语言才有的特性,使得JavaScript能够同时具有 DOM 操作 (浏览器) 和 I/O 、 文件读写 、 操作数据库(服务器端) 等能力,是目前 最简单的全栈式语言 。 Node.js通常被用来开发 低延迟 的网络应用,也就是那些需要在服务器端环境和前端 实时收集 和 交换数据 的应用(API、即时聊天、微服务)。 1.1.2. b)什么是Node.js? Node.js不是JavaScript应用,不是语言(JavaScript是语言),不是想Rails(Ruby)或Django(Python)一样的框架,也不是想Nginx一样的Web服务器。Node.js是JavaScript运行时环境 构建在Chrome's V8这个著名的JavaScript引擎之上,Chrome V8引擎以C/C++ 为主,相当于使用JavaScript写法,转成C/C++ 调用,大大的降低了学习成本 事件驱动(event-driven),非阻塞 I/O 模型,简单点讲就是每个函数都是异步的,最后由Libuv这个C/C+

C# async await 死锁问题总结

Deadly 提交于 2020-01-05 00:28:15
可能发生死锁的程序类型 1、WPF/WinForm程序 2、asp.net (不包括asp.net mvc)程序 死锁的产生原理 对异步方法返回的Task调用Wait()或访问Result属性时,可能会产生死锁。 下面的WPF代码会出现死锁: private void Button_Click_7(object sender, RoutedEventArgs e) { Method1().Wait(); } private async Task Method1() { await Task.Delay(100); txtLog.AppendText("后续代码"); } 下面的asp.net mvc代码也会出现死锁: public ActionResult Index() { string s=Method1().Result; return View(); } private async Task<string> Method1() { await Task.Delay(100); return "hello"; } 以WPF代码为例,事件处理器调用Method1,得到Task对象,然后调用Task的Wait方法,阻塞自己所在的线程,即主线程,直到Task对象“完成”。而返回的Task对象要想“完成”,必须在主线程上执行await之后的代码。而主线程早就处理阻塞状态

浏览器渲染页面原理,reflow、repaint及其优化

别等时光非礼了梦想. 提交于 2020-01-04 02:38:22
浏览器的主要组件包括: 1. 用户界面 - 包括地址栏、前进/后退按钮、书签菜单等。除了浏览器主窗口显示的你请求的页面外,其他显示的各个部分都属于用户界面。 2. 浏览器引擎 - 在用户界面和渲染引擎之间传送指令。 3. 渲染引擎 - 负责显示请求的内容。如果请求的内容是 HTML,它就负责解析 HTML 和 CSS 内容,并将解析后的内容显示在屏幕上。 4. 网络 - 用于网络调用,比如 HTTP 请求。其接口与平台无关,并为所有平台提供底层实现。 5. 用户界面后端 - 用于绘制基本的窗口小部件,比如组合框和窗口。其公开了与平台无关的通用接口,而在底层使用操作系统的用户界面方法。 6. JavaScript 解释器。用于解析和执行 JavaScript 代码,比如chrome的JavaScript解释器是V8。 7. 数据存储。这是持久层。浏览器需要在硬盘上保存各种数据,例如 Cookie。新的 HTML 规范 (HTML5)定义了“网络数据库”,这是一个完整(但是轻便)的浏览器内数据库。 关键路径渲染(Critical Rendering Path):渐进式 浏览器拿到HTML之后的渲染过程:(不同内核实现不一样但大概是这样) 1. 解析HTML,构建DOM tree。 2. 解析CSS,构建CSSOM tree。 3. 合并DOM tree和CSSOM tree

js的异步加载及promise的三种状态

夙愿已清 提交于 2020-01-04 01:04:24
---恢复内容开始--- js异步加载 同步加载 <script src="http://baidu.com/script.js"></script> ---> 我们平时经常使用的就是这种同步加载的形式 同步模式,又称阻塞模式,会阻止浏览器的后续处理,停止了后续的解析,因此停止了后续的文件加载(如图像)、渲染、代码执行。 js 之所以要同步执行,是因为 js 中可能有输出 document 内容、修改dom、重定向等行为,所以默认同步执行才是安全的。 以前的一般建议是把<script>放在页面末尾</body>之前,这样尽可能减少这种阻塞行为,而先让页面展示出来。 异步加载 异步加载有几种方式,现在介绍以下两种常用的 async : async的定义和用法(是HTML5的属性) async 属性规定一旦脚本可用,则会异步执行。 示例: <script type="text/javascript" src="demo_async.js" async="async"></script> 注:async 属性仅适用于外部脚本(只有在使用 src 属性时) 注:有多种执行外部脚本的方法: 如果不使用 async 且 defer="defer":脚本将在页面完成解析时执行 如果 async="async":脚本相对于页面的其余部分异步地执行(当页面继续进行解析时,脚本将被执行) 如果既不使用

[原创]如何确保JavaScript的执行顺序 –之jQuery1.5.1与jQuery1.4.4的差异

妖精的绣舞 提交于 2020-01-04 01:03:38
1. 引言 在上一篇文章《 如何确保 JavaScript 的执行顺序 - 之实战篇 》中,我们发现 jQuery.html 函数在动态加载跨域 JavaScript 时,在 Firefox 和 Opera 中可以按照引入顺序执行,而在 IE , Chrome 和 Safari 中都不能确保执行顺序。 经过分析,我们发现 jQuery.html 在处理跨域静态 JS 文件时,并非采用的同步 AJAX (也存在同源策略的限制),而是在 head 中添加 script 标签来完成的。 我们先来简单回顾下 HTML 源代码( test2_1.htm ): <html> <head> <title></title> <script src="js/jquery-1.4.4.js" type="text/javascript"></script> <script> $(function(){ $('#container').html('<script src="http://test1.sanshi.me/jsorder/service.ashx?file=js/jquery-ui.js&delay=2000" type="text\/javascript"><\/script>' + '<script>alert(typeof(jQuery.ui));<\/script>'); }); <