异步队列

Python 之进程

牧云@^-^@ 提交于 2020-01-15 15:15:30
理论知识 操作系统背景知识 顾名思义,进程即正在执行的一个过程。进程是对正在运行程序的一个抽象。 进程的概念起源于操作系统,是操作系统最核心的概念,也是操作系统提供的最古老也是最重要的抽象概念之一。操作系统的其他所有内容都是围绕进程的概念展开的。 所以想要真正了解进程,必须事先了解操作系统, 点击进入 PS:即使可以利用的cpu只有一个(早期的计算机确实如此),也能保证支持(伪)并发的能力。将一个单独的cpu变成多个虚拟的cpu(多道技术:时间多路复用和空间多路复用+硬件上支持隔离),没有进程的抽象,现代计算机将不复存在。 必备的理论基础: 一 操作系统的作用: 1:隐藏丑陋复杂的硬件接口,提供良好的抽象接口 2:管理、调度进程,并且将多个进程对硬件的竞争变得有序 二 多道技术: 1.产生背景:针对单核,实现并发 ps:现在的主机一般是多核,那么每个核都会利用多道技术 有4个cpu,运行于cpu1的某个程序遇到io阻塞,会等到io结束再重新调度,且会被调度到4个cpu中的任意一个,具体由操作系统调度算法决定。 2.空间上的复用:如内存中同时有多道程序 3.时间上的复用:复用一个cpu的时间片 强调:遇到io切,占用cpu时间过长也切,核心在于切之前将进程的状态保存下来,这样才能保证下次切换回来时,能基于上次切走的位置继续运行 什么是进程 进程(Process

三.3短信-异步执行

喜欢而已 提交于 2020-01-13 16:01:35
上图过程中:请求云通服务器并云通发用户短信这个过程较耗时,所以将这个耗时过程的代码放到一个新的进程中去执行!! # 异步 - 问题:在视图中如果有耗时的代码,则用户的响应需要等待很长时间--等很久才能得到60秒倒计时 - 需要:让用户快速得到响应,倒计时 - 解决:将耗时代码放到异步中执行,如进程、线程、协程 - 新问题:所有底层的代码都已经被框架,如django封装好,此时如何使用异步操作 - 解决:使用celery,封装好了异步的代码 ### rabbitmq - 队列 - 安装rabbitmq - python虚拟环境中安装包pika ### celery的基础概念 - 构成 - 代理人broker:指定队列存储到哪里去 - 工人worker:从队列中取任务执行,本质就是一个新进程、线程、协程 - 队列queue:放任务,逐个执行----用rabbitmq作队列 - 任务task:耗时的代码 - 安装celery:pip install celery - 实现过程: - 新建celry_tasks包,用于写任务的代码 - 新建main.py,创建celery对象 - 新建config.py,指定配置,当前为指定rabbitmq为队列 - 新建sms包,新建tasks.py,在这个文件中写任务代码 - 定义方法send_sms,剪切耗时代码 - 添加装饰器@app.task()

JavaScript-EventLoop-事件循环

青春壹個敷衍的年華 提交于 2020-01-11 16:20:13
2020-01-11 EventLoop-事件循环 一、学习事件循环之前,先学习几个英语词组 EventLoop 事件循环 Event Queue 事件队列 Event Table 事件表macro-task 宏任务micro-task 微任务 二、再来一道事件机制的题 console.log(1); setTimeout(() => { console.log(2); Promise.resolve().then(() => { console.log(3) }); }); new Promise((resolve, reject) => { console.log(4) resolve(5) }).then((data) => { console.log(data); Promise.resolve().then(() => { console.log(6) }).then(() => { console.log(7) setTimeout(() => { console.log(8) }, 0); }); }) setTimeout(() => { console.log(9); }) console.log(10); // 正确结果:1、4、10、5、6、7、2、3、9、8 哈哈哈,看到上边的题是不是被吓到了,小甜的老师当时发给我的时候,我也惊呆了,同步异步真的太难为我了。

同步,异步 阻塞,非阻塞, 异步+回调机制 线程队列 事件Event 丶协程

大兔子大兔子 提交于 2020-01-11 16:08:59
day36 一丶同步,异步 同步: 所谓同步就是一个任务需要依赖另一个任务时,只有被依赖任务执行完毕之后,依赖的任务才会完成.这是可靠的任务序列.要么都成功,要么失败,两个任务的状态可以保持一致. 异步: 所谓异步不需要等待被依赖的任务完成,只是通知依赖的任务要完成什么工作.依赖的任务也立即执行,只要自己完成了整个任务就算完成了. 至于被依赖的任务是否完成,依赖它的任务无法确定,是不可靠的任务序列 ### 同步和异步## 比如我去银行办理业务,可能会有两种方式:# 第一种 :选择排队等候;# 第二种 :选择取一个小纸条上面有我的号码,等到排到我这一号时由柜台的人通知我轮到我去办理业务了;​# 第一种:前者(排队等候)就是同步等待消息通知,也就是我要一直在等待银行办理业务情况;​# 第二种:后者(等待别人通知)就是异步等待消息通知。在异步消息处理中,等待消息通知者(在这个例子中就是等待办理业务的人)往往注册一个回调机制,在所等待的事件被触发时由触发机制(在这里是柜台的人)通过某种机制(在这里是写在小纸条上的号码,喊号)找到等待该事件的人。 二丶阻塞,非阻塞, 阻塞和非阻塞两个概念与程序(也就是执行程序的'线程')等待消息通知时的状态相关 阻塞: 在程序中,阻塞代表程序'卡'在某处,必须等待这处执行完毕才能继续执行. 通常的阻塞大多数是IO阻塞 比如:银行排队取钱是一条流水线

异步通道和异步运算结果

末鹿安然 提交于 2020-01-10 18:48:22
异步通道和异步运算结果 以下内容参考孙卫琴所写的《Java网络编程核心技术详解》一书的第12章。 源代码下载地址为: http://lesson.javathinker.net/javanet/javanetsourcecode.rar 从JDK7开始,引入了表示异步通道的AsynchronousSocketChannel类和AsynchronousServerSocketChannel类,这两个类的作用与SocketChannel类和ServerSocketChannel相似,区别在于异步通道的一些方法总是采用非阻塞工作模式,并且它们的非阻塞方法会立即返回一个Future对象,用来存放方法的异步运算结果。 AsynchronousSocketChannel类有以下非阻塞方法: Future<Void> connect(SocketAddress remote):连接远程主机。 Future<Integer> read(ByteBuffer dst):从通道中读入数据,存放到ByteBuffer中。Future对象中包含了实际从通道中读到的字节数。 Future<Integer> write(ByteBuffer src):把ByteBuffer中的数据写入到通道中。Future对象中包含了实际写入通道的字节数。

【转】JAVA BIO与NIO、AIO的区别

你。 提交于 2020-01-09 22:23:17
Java中IO的模型分为三种,同步阻塞的BIO、同步非阻塞的NIO、异步非阻塞的AIO。 BIO【同步阻塞】 在JDK1.4出来之前,我们建立网络连接的时候采用BIO模式,需要先在服务端启动一个ServerSocket,然后在客户端启动Socket来对服务端进行通信,默认情况下服务端需要对每个请求建立一堆线程等待请求,而客户端发送请求后,先咨询服务端是否有线程相应,如果没有则会一直等待或者遭到拒绝请求,如果有的话,客户端会线程会等待请求结束后才继续执行。 NIO【同步非阻塞】 NIO本身是基于事件驱动思想来完成的,其主要想解决的是BIO的大并发问题: 在使用同步I/O的网络应用中,如果要同时处理多个客户端请求,或是在客户端要同时和多个服务器进行通讯,就必须使用多线程来处理。也就是说,将每一个客户端请求分配给一个线程来单独处理。这样做虽然可以达到我们的要求,但同时又会带来另外一个问题。由于每创建一个线程,就要为这个线程分配一定的内存空间(也叫工作存储器),而且操作系统本身也对线程的总数有一定的限制。如果客户端的请求过多,服务端程序可能会因为不堪重负而拒绝客户端的请求,甚至服务器可能会因此而瘫痪。 NIO基于Reactor,当socket有流可读或可写入socket时,操作系统会相应的通知引用程序进行处理,应用再将流读取到缓冲区或写入操作系统。 也就是说,这个时候

同步、异步、多线程

雨燕双飞 提交于 2020-01-09 18:35:07
关于Web开发里并发、同步、异步以及事件驱动编程的相关技术 1、异步、多线程、并行 异步、多线程、并行不是同一个概念 线程:是 进程 中某个单一顺序的 控制流 。 并行:是同一时刻有多条指令同时被执行, 异步:是让CPU暂时搁置当前请求的响应,处理下一个请求,当通过轮询或其他方式得到回调通知后,开始运行。 多线程将异步操作放入另一线程中运行,通过轮询或回调方法得到完成通知,但是完成端口, 由操作系统接管异步操作的调度,通过硬件中断,在完成时触发回调方法,此方式不需要占用额外线程。 异步最终的目的就是给我们带来更高效的时间效应,它是一种结果,而实现这个异步的可能是异步委托,线程池,线程等等,只不过是一种方法或途径罢了。 2、并行、并发 并行(parallelise)同时刻(某点),并发(concurrency)同时间(某段) 3、互斥、同步 互斥:进程间相互排斥使用临界资源;比如写操作; 同步:不是排斥关系而是依赖关系,前一个进程的输出是后一个进程的输入,当第一个进程没有结束时第二个进程必须等待,相互协同完成一些事情;具有同步关系的一组进程并发时发送的消息称为消息或者事件; 摘自: 并行和并发、同步和异步的区别 4、iOS之GCD iOS多线程--彻底学会多线程之『GCD』 并行队列+异步执行 串行队列+同步执行 并行队列+同步执行 串行队列+异步执行 5、其他 原文: 同步、异步

我把RXjava的源码和这份面试都给你了,你还告诉我面不过拿不到offer?(一)

我们两清 提交于 2020-01-08 23:33:04
就在前不久做了一个关于RXJava的相关教学视频,过后整理了关于RxJava的预习资料和相关内容以及图文和相关源码,需要借鉴的可以和我联系~ 一丶 面试辅助路线(全部内容在完整的PDF里都有讲解) ( 顺手留下GitHub链接,需要获取相关面试等内容的可以自己去找 ) https://github.com/xiangjiana/Android-MS (VX:mm14525201314) 二丶 RXJava预习: JAVA设计模式之观察者模式 1、初步认识 观察者模式的定义: 在对象之间定义了一对多的依赖,这样一来,当一个对象改变状态,依赖它的对象会收到通知并自动更新。 大白话: 其实就是发布订阅模式,发布者发布信息,订阅者获取信息,订阅了就能收到信息,没订阅就收不到信息。 2丶这个模式的结构图 : 3、可以看到,该模式包含四个角色 抽象被观察者角色: 也就是一个抽象主题,它把所有对观察者对象的引用保存在一个集合中,每个主题都可以有任意数量的观察者。抽象主题提供一个接口,可以增加和删除观察者角色。一般用一个抽象类和接口来实现。 抽象观察者角色: 为所有的具体观察者定义一个接口,在得到主题通知时更新自己。 具体被观察者角色: 也就是一个具体的主题,在集体主题的内部状态改变时,所有登记过的观察者发出通知。 具体观察者角色: 实现抽象观察者角色所需要的更新接口

Spring boot 实现高吞吐量异步处理(适用于高并发场景)

末鹿安然 提交于 2020-01-08 03:29:32
技术要点 org.springframework.web.context.request.async.DeferredResult<T> 示例如下: 1. 新建Maven项目 async 2. pom.xml <project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd"> <modelVersion>4.0.0</modelVersion> <groupId>com.java</groupId> <artifactId>async</artifactId> <version>1.0.0</version> <parent> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-parent</artifactId> <version>2.0.5.RELEASE</version> </parent> <dependencies> <!--

ASP.NET MVC 线程和并发

馋奶兔 提交于 2020-01-07 19:24:19
我也想过跳过C#高级知识点概要直接讲MVC,但经过前思后想,还是觉得有必要讲的。我希望通过自己的经验给大家一些指引,带着大家一起走上ASP.NET MVC大牛之路,少走弯路。同时也希望能和大家一起交流,这样也能发现我自己的不足,对我自己的帮助也是非常大的。 建议大家对C#撑握的不错的时候,可以去看一些开源项目。走技术这条路,就要耐得住寂寞(群里双休日说要让群主找妹子进群的人必须反思),练好内功。不撑握C#高级知识点,别想看懂优秀的开源项目,更别指望吸收其编程思想;你的水平,随时可以被一个实习生代替!切记不能浮躁! 本文讲线程和并发,这块知识点太多太多了,不可能用一篇文章写的面面具到(本身主题就是C#高级知识概要嘛),我所了解的也有限。但对于Web开发,我想本文的知识点应该足够,如果后面有遇到本文没讲的,后面再补充吧。 本文目录: 线程的简单使用 并发和异步的区别 并发控制 - 锁 线程的信号机制 线程池中的线程 案例:支持并发的异步日志组件 结语 线程的简单使用 常见的并发和异步大多是基于线程来实现的,所以本文先讲线程的简单使用方法。 使用线程,我们需要引用System.Threading命名空间。创建一个线程最简单的方法就是在 new 一个 Thread,并传递一个ThreadStart委托(无参数)或ParameterizedThreadStart委托(带参数),如下: