async

Async await 异步编程说明

与世无争的帅哥 提交于 2019-12-24 06:30:24
希望在编程上有些许提高所以 最近连续2篇博客都在说明多线程和异步编程的使用,异步和多线程之间区别请自行百度,因为理解不是特别透彻就不在叙述以免误导大家,这里写下新研究整理 task 和 await 的异步编程使用 调用子方法和耗时方法如下 /// <summary> /// 有返回值异步方法 /// </summary> /// <returns></returns> static async Task<int> HaveReturnAsync() { await Task.Run(() => Method1("HaveReturnAsync")); // part_001 //Task t1 = new Task(() => sss()); //t1.Start(); Console.WriteLine("ccc"); //part_003 return 10; } /// <summary> /// 耗时输出方法 /// </summary> /// <param name="name"></param> static void Method1(string name) { string temp1 = ""+name+"_1"; string temp2 = "" + name + "_2"; Console.WriteLine(temp1); Thread.Sleep

【dart学习】-- Dart之异步编程

ε祈祈猫儿з 提交于 2019-12-24 03:41:29
一,概述   编程中的代码执行,通常分为 同步 与 异步 两种。 同步 : 简单说,同步就是按照代码的编写顺序,从上到下依次执行,这也是最简单的我们最常接触的一种形式。但是同步代码的缺点也显而易见,如果其中某一行或几行代码非常耗时,那么就会阻塞,使得后面的代码不能被立刻执行。 异步 : 异步的出现正是为了解决这种问题,它可以使某部分耗时代码不在当前这条执行线路上立刻执行,那究竟怎么执行呢?最常见的一种方案是使用多线程,也就相当于开辟另一条执行线,然后让耗时代码在另一条执行线上运行,这样两条执行线并列,耗时代码自然也就不能阻塞主执行线上的代码了。    多线程 虽然好用,但是在大量并发时,仍然存在两个较大的缺陷,一个是开辟线程比较耗费资源,线程开多了机器吃不消,另一个则是线程的锁问题,多个线程操作共享内存时需要加锁,复杂情况下的锁竞争不仅会降低性能,还可能造成死锁。因此又出现了基于事件的 异步模型 。    异步模型 简单说就是在某个单线程中存在一个事件循环和一个事件队列,事件循环不断的从事件队列中取出事件来执行,这里的事件就好比是一段代码,每当遇到耗时的事件时,事件循环不会停下来等待结果,它会跳过耗时事件,继续执行其后的事件。当不耗时的事件都完成了,再来查看耗时事件的结果。因此,耗时事件不会阻塞整个事件循环,这让它后面的事件也会有机会得到执行。   我们很容易发现

ES6之Generator和async

不羁的心 提交于 2019-12-22 19:36:33
目录 一、概述 二、Generator函数 1. 基本原理 2. 使用语法 (1)yield表达式 (2)yield*表达式 (3)for ... of循环 (4)return和throw 3. Generator函数的异步应用 三、async函数 1. 基本原理 2. 语法规范 (1)await命令 (2)错误处理 总结 一、概述 Generator和async是ES6提供的新的异步解决方案。 Generator函数可以理解为一个可以输出多个值的状态机。它的返回值是一个遍历器对象(Iterator),每次调用该遍历器的next方法就会输出一个值。当有多个异步操作需要按序执行时,只要在完成一个时调一次next方法即可执行下一个。不过想要自动化执行Generator函数则需要借助一些工具。 async函数则是Generator函数的语法糖,它为Generator函数内置了自动执行器。用async函数写出的异步代码几乎与同步代码没有什么差别,使用async函数,不需要任何外部工具,即可写出格式优雅的异步代码。 总的来说,Generator函数定义了一种新的异步模型,而async函数通过对该模型的再封装,提供了一种优雅的异步解决方案。 下面我们分别对两者展开详细探讨。 二、Generator函数 1. 基本原理 众所周知,在JavaScript中,任何函数最多只能有一个返回值

spring boot自定义Async线程池

我的梦境 提交于 2019-12-22 05:10:14
在spring boot项目中,会用到@Async注解来实现异步处理,该注解默认使用了 SimpleAsyncTaskExecutor 线程池,但是该线程池不会重用线程,而是每次创建一个新的线程,所以可以自己定义一个可重用线程的线程池。 自定义线程池 package com . album . config ; import org . springframework . context . annotation . Bean ; import org . springframework . context . annotation . Configuration ; import org . springframework . scheduling . annotation . EnableAsync ; import org . springframework . scheduling . concurrent . ThreadPoolTaskExecutor ; import java . util . concurrent . ThreadPoolExecutor ; /** * 线程池 * @author:JZ * @date:2019/12/21 */ @Configuration @EnableAsync public class SyncConfiguration

koa-router基本使用、错误处理404和500

荒凉一梦 提交于 2019-12-21 18:14:09
路由:根据请求方式、请求地址的不同来执行对应的函数 安装 npm install koa-router --save 案例: const Koa = require ( "koa" ) ; const Router = require ( "koa-router" ) ; let server = new Koa ( ) ; server . listen ( 8000 ) ; let router = new Router ( ) ; router . get ( '/' , async ctx => { ctx . body = 'aaa' ; } ) ; router . post ( '/upload' , async ctx => { ctx . body = 'bbb' ; } ) ; router . get ( '/news' , async ctx => { ctx . body = 'ccc' ; } ) server . use ( router . routes ( ) ) ; // 中间件中使用router get请求根目录’/’: post请求/upload: 这里使用了form表单 <!DOCTYPE html> < html lang = " zh " > < head > < meta charset = " UTF-8 " > < title >

tornado常见的异步非堵塞写法

倾然丶 夕夏残阳落幕 提交于 2019-12-21 10:52:54
【推荐】2019 Java 开发者跳槽指南.pdf(吐血整理) >>> 非堵塞和异步有什么区别? 非堵塞 在tornado的框架中非堵塞一般指得是网络I/O层面的socket数据接收模式(select或者epoll),不论用哪个模式,最终程序都会收到数据并处理数据(这个数据要么被转发、要么被解析和处理)。 非堵塞的弊端: 如果处理一个密集计算的请求需要花费10秒钟(就是堵塞了10秒钟),当两个或多个请求同时到达时,只要第一个被接受处理没结束,其他全部请求都要等,并且挨个挨个等到被轮询结束。这就是单线程事件还回机制(非堵塞机制), 对堵塞零容忍, 任何一个地方堵住了还回线程,其他全部请求都被堵住。 也就是说采用了非堵塞模式之后,最好不要用堵塞(常规解析数据的函数)的代码块来解析数据。 异步 异步的作用是将堵塞代码错开来,不放在当前接受数据的线程中处理, 要么丢到rabbitmq/zeromq/activemq中交给另外一个进程去处理,要么用其他线程或进程来处理。 让监听数据的这个socket收到数据后直接抛给其他程序来处理,然后立马保持监听状态,这样子程序的循环能力就非常强。 再就是要提的一点,tornado本身的ioloop就采用epool/select/kqueue来完成非堵塞动作,咱们使用tornado只要把异步的代码写好就可以很好的发挥出tornado的优势了。

Async Await 使用

帅比萌擦擦* 提交于 2019-12-21 04:33:46
1、简单例子 var sleep = function (time) { return new Promise(function (resolve, reject) { setTimeout(function () { resolve(); }, time); }) }; var start = async function () { // 在这里使用起来就像同步代码那样直观 console.log('start'); await sleep(3000); console.log('end'); }; start(); 控制台先输出 start ,稍等 3秒 后,输出了 end 。 2、基本规则 async 表示 这是一个async函数 , await只能用在这个函数里面 。 await 表示在这里 等待promise返回结果 了,再继续执行。 await 后面跟着的 应该是一个promise对象 (当然,其他返回值也没关系,只是会立即执行,不过那样就没有意义了…) 3、 await一定出现在async标记的代码中,表示后面挂起一段线程代码, 而await异步代码后在代码均表示回调代码 。 来源: https://www.cnblogs.com/mengfangui/p/8858420.html

爬虫的新模块pyppeteer的使用

偶尔善良 提交于 2019-12-20 22:38:05
安装 python3 -m pip install pyppeteer 最好是py3.5+ 手动安装 你懂的,天朝网络环境很复杂,如果要用 pyppeteer 自己绑定的 chromium ,半天都下载不下来,所以我们要手动安装,然后在程序里面指定 executablePath 。 下载地址 模块介绍 启动pyppeteer.launch launch 浏览器,可以传入一个字典来配置几个options,比如: browser = await pyppeteer.launch({ 'headless': False, # 关闭无头模式 'devtools': True, # 打开 chromium 的 devtools // 'executablePath': '你下载的Chromium.app/Contents/MacOS/Chromiu', //# 浏览器的存放地址 'args': [ '--disable-extensions', '--hide-scrollbars', '--disable-bundled-ppapi-flash', '--mute-audio', '--no-sandbox', '--disable-setuid-sandbox', '--disable-gpu', ], 'dumpio': True, }) browser = await launch(

node异步转同步,KO 恶魔金字塔

前提是你 提交于 2019-12-20 14:51:16
【推荐】2019 Java 开发者跳槽指南.pdf(吐血整理) >>> 前言 Nodejs框架类库很多,功能相近的框架,本来只打算学一种写一种。之前写过流程控制框架 windjs文章 ,本来是想着要支持一下“国人框架”。无奈啊,作者竟然放弃了维护,国人真的不靠谱啊! “流程控制”本来是件比较简单的事,但是由于Nodejs的异步架构的实现方法,对于需要同步的业务逻辑,实现起来就比较麻烦。嵌套3-4层,代码就会变得的支离破碎了! 今天就遇到了一个业务逻辑,连续对数据库操作,前后有依赖。让我们看看Async是如何解决问题的。 不用不知道,一用真强大!! 目录 Async介绍 Async安装 Async函数介绍 async_demo使用介绍 场景:对数据库的连续操作 async_demo我的分支 1. Async介绍 Async是一个流程控制工具包,提供了直接而强大的异步功能。基于Javascript为Node.js设计,同时也可以直接在浏览器中使用。 Async提供了大约20个函数,包括常用的 map, reduce, filter, forEach 等,异步流程控制模式包括,串行(series),并行(parallel),瀑布(waterfall)等。 项目地址: https://github.com/caolan/async 2. Async安装 我的系统环境 win7 64bit

iOS开发之用到的几种锁整理

*爱你&永不变心* 提交于 2019-12-19 16:36:09
1. iOS中的互斥锁 在编程中,引入对象互斥锁的概念,来保证共享数据操作的完整性。每个对象都对应于一个可称为“互斥锁”的标记,这个标记用来保证在任一时刻,只能有一个线程访问对象。 1.1 @synchronized (self) - (void)lock1 { @synchronized (self) { // 加锁操作 }} 1.2 NSLock - (void)lock2 { NSLock *xwlock = [[NSLock alloc] init]; XWLogBlock logBlock = ^ (NSArray *array) { [xwlock lock]; for (id obj in array) { NSLog(@"%@",obj); } [xwlock unlock]; }; dispatch_async(dispatch_get_global_queue(DISPATCH_QUEUE_PRIORITY_DEFAULT, 0), ^{ NSArray *array = @[@1,@2,@3]; logBlock(array); });} 1.3 pthread pthread除了创建互斥锁,还可以创建递归锁、读写锁、once等锁 __block pthread_mutex_t mutex; pthread_mutex_init(&mutex, NULL);