异步队列

大话后端开发的奇淫技巧大集合

空扰寡人 提交于 2019-12-10 19:52:24
模块化设计 根据业务场景,将业务抽离成独立模块,对外通过接口提供服务,减少系统复杂度和耦合度,实现可复用,易维护,易拓展 项目中实践例子: Before: 在返还购APP里有个【我的红包】的功能,用户的红包数据来自多个业务,如:邀请新用户注册领取100元红包,大促活动双倍红包,等各种活动红包,多个活动业务都实现了一套不同规则的红包领取和红包奖励发放的机制,导致红包不可管理,不能复用,难维护难拓展 After: 重构红包业务 红包可后台管理 红包信息管理,可添加,可编辑,可配置红包使用的规则,可管理用户红包 红包奖励发放统一处理 应用业务的接入只需要专注给用户进行红包发放即可 设计概要 Before VS After 产品有时提出的业务需求没有往这方面去考虑,结合场景和未来拓展需要,在需求讨论的时候提出模块化设计方案,并可以协助产品进行设计 通用服务抽离 在项目开发中经常会遇到些类似的功能,但是不同的开发人员都各自实现,或者因为不能复用又重新开发一个,导致了类似功能的重复开发,所以我们需要对能够抽离独立服务的功能进行抽离,达到复用的效果,并且可以不断拓展完善,节约了后续开发成本,提高开发效率,易于维护和拓展 项目中实践例子: Before 在业务中经常需要对用户进行信息通知,如:短信定时通知,APP消息推送,微信通知,等 开发人员在接到需求中有通知功能的时候没有考虑后续拓展

zz《分布式服务架构 原理、设计与实战》综合

妖精的绣舞 提交于 2019-12-10 18:44:30
这书以分布式微服务系统为主线,讲解了微服务架构设计、分布式一致性、性能优化等内容,并介绍了与微服务系统紧密联系的日志系统、全局调用链、容器化等。 还是一样,每一章摘抄一些自己觉得有用的内容,归纳整理,然后加以理解。 第1章 分布式微服务架构设计原理 1. 由传统单体架构到服务化架构 (老生常谈,感觉所有谈到微服务的内容都是从这个角度开始叙述。) (1)J2EE是二八原则的典型应用场景:它将80%通用的与业务无关的逻辑和流程封装在应用服务器的模块化组件里,通过配置的模式提供给应用程序访问,应用程序实现20%的专用逻辑,并 通过配置的形式来访问应用服务器提供的模块化组件 。 (2)康威定律 设计系统的组织时,最终产生的设计等价于组织的沟通结构,通俗来说, 团队的交流机制应该与架构设计机制相对应 。 (3)Java AOP的实现方式有三种 1》对Java字节码进行 重新编译 ,将切面插入字节码的某些点和面上,可以使用 cglib库 实现 2》定制类加载器,在类加载时对字节码进行补充,在字节码中插入切面,增加了除业务逻辑外的功能,JVM自身提供的 Java Agent机制 就是在 加载类的字节码时 ,通过增加切面来实现AOP的。 3》JVM本身提供了 动态代理组件 ,可以通过它实现任意对象的代理模式, 在代理的过程中 可以插入切面的逻辑。可以使用Java提供的APIProxy

项目

你说的曾经没有我的故事 提交于 2019-12-10 17:36:54
6.让我说一下项目的具体业务模块 7.对其中一个模块(用户)说下数据库有几张表以及每张表有什么字段(着重问了其中一张表) 8.问我项目中一个业务(购票)可能存在的问题以及解决办法 (我就说了两个问题..一个是一致性问题,解决办法是加锁,一个是高并发问题) 看你用到了redis,某个功能具体怎么实现的 4. 你的异步队列,好像可以用消息中间件来做 5. 用到SpringBoot,那你知道微服务吗?简单讲讲 考虑并发,你后端可以怎么做 来源: https://www.cnblogs.com/youngao/p/12017979.html

一篇专题让你秒懂GCD死锁问题!

房东的猫 提交于 2019-12-10 08:20:50
故事背景: GCD的死锁问题,一直是在使用多线程的时候,一个比较绕也必须要注意的问题,今天在工作中我们几个同事又讨论到了这个话题,通过和大伙的交流,发现不少的同事还是有绕不明白的地方, 我就想到,要不我来写一个关于GCD死锁的专题好了,于是就有了这篇关于GCD死锁的专题: (下方的理解,仅限于我个人的理解,有不妥的地方,望大家斧正!) 如果您有任何意见或建议也可以通过 邮件 或 微博 联系我 环境信息: Mac OS X 10.11.3 Xcode 7.2 iOS 9.2 阐述: ####1. 什么是GCD ? GCD,全称 Grand Central Dispatch。可翻译为”牛逼的中枢调度器”。它是纯C语言的,提供了非常多强大的函数。 Grand是宏伟的、极重要的意思。 GCD是提供了功能强大的任务和队列控制功能,相比于NSOperation更加底层,虽然现象苹果极力的推荐使用NSOperation来解决多线程问题, 但是,就目前市场上大部分企业的iOS开发团队而言, GCD仍然还是大头, NSOperation也只会逐步的来替代GCD, 因此在开线程的时候,如果不注意也会导致一些问题, 比如死锁。 ####2.什么是GCD死锁 ? 所谓死锁,通常指有两个线程A和B都卡住了,A在等B ,B在等A,相互等待对方完成某些操作。A不能完成是因为它在等待B完成。但B也不能完成

ASIHttpRequest 详解

巧了我就是萌 提交于 2019-12-09 23:37:20
ASIHTTPRequest 是一款极其强劲的 HTTP 访问开源项目。让简单的 API 完成复杂的功能,如:异步请求,队列请求,GZIP 压缩,缓存,断点续传,进度跟踪,上传文件,HTTP 认证。在新的版本中,还加入了 Objective-C 闭包 Block 的支持,让我们的代码加轻简灵活。 下面就举例说明它的 API 用法。 发起一个同步请求 同步意为着线程阻塞,在主线程中 使用 此方法会使应用Hang住而不响应任何用户事件。所以,在 应用 程序设计时,大多被用在专门的子线程增加用户体验,或用异步请求代替(下面会讲到)。 - (IBAction)grabURL:(id)sender { NSURL *url = [NSURL URLWithString:@"http://allseeing-i.com"]; ASIHTTPRequest *request = [ASIHTTPRequest requestWithURL:url]; [request startSynchronous]; NSError *error = [request error]; if (!error) { NSString *response = [request responseString]; } } 用 requestWithURL 快捷方法获取 ASIHTTPRequest 的一个实例

ASIHTTPREQUEST详解

给你一囗甜甜゛ 提交于 2019-12-09 23:13:24
目录 发起一个同步请求 创建一个异步请求 队列请求 请求队列上下文 ASINetworkQueues, 它的delegate提供更为丰富的功能 取消异步请求 安全的内存回收建议 向服务器端上传数据 下载文件 获取响应信息 获取请求进度 cookie的支持 大文件断点续传 ASIDownloadCache 设置下载缓存 多种的缓存并存 缓存策略 缓存存储方式 缓存其它特性 实现自定义的缓存 使用代理请求 ASIHTTPRequest, 请求的其它特性 ASIHTTPRequest是一款极其强劲的HTTP访问开源项目。让简单的API完成复杂的功能, 如: 异步请求,队列请求,GZIP压缩,缓存,断点续传,进度跟踪,上传文件,HTTP认证 在新的版本中,还加入了Objective-C闭包Block的支持,让我们的代码更加轻简灵活。 下面就举例说明它的 API用法 。 发起一个同步请求 同步意为着线程阻塞,在主线程中使用此方法会使应用Hang住而不响应任何用户事件。所以,在应用程序设计时,大多被用在专门的子线程增加用户体验,或用异步请求代替(下面会讲到)。 - (IBAction)grabURL:(id)sender { NSURL *url = [NSURL URLWithString:@" http://allseeing-i.com" ]; ASIHTTPRequest

Grand Central Dispatch 基础教程:Part 2/2

橙三吉。 提交于 2019-12-09 17:53:31
原文 Grand Central Dispatch Tutorial for Swift: Part 2/2 原文作者:Bj rn Olav Ruud 译者:Ethan Joe 欢迎来到Grand Central Dispatch系列教程的第二部分! 在教程的 第一部分 ,你学到了一些关于并发,线程及GCD工作原理的知识。你通过并用dispatch_barrier_async与dispatch_sync保证了PhotoManager单例在读取与写入照片过程中的线性安全性。值得一提的是,你不仅通过dispatch_after及时地向用户发出提醒以此优化了App的UX而且还通过dispatch_async将部分工作从一个View Controller的实例化过程中分割至另一线程以此实现CPU高密度处理工作。 假如你是一路从上一部分教程学过来的话,你完全可以在以前的工程文件上继续Coding。但假如你没有完成教程的第一部分或是不想继续使用自己的工程文件的话,你可从这里下载到教程第一部分的完整工程文件。 OK! 是时候探索一下更多关于GCD的知识了。 修复提早出现的Popup 也许你已经注意到了当你通过Le Internet的方式添加照片时,在所有照片下载完成前AlertView就已经跳出来提醒你“Download Complete”。 See That?

Python - Celery

旧巷老猫 提交于 2019-12-09 15:42:54
Celery 概念 简单的灵活可靠的处理大量消息的分布式系统 专注于实时处理的异步任务队列, 同时也支持任务调度 结构图 使用场景 异步任务   将耗时的操作任务提交给 Celery 去异步执行 - 比如发送短信 / 邮件, 消息推送, 音视频处理等 定时任务   类似于 crontab, 比如每日的数据统计 安装 pip install celery[redis] 消息中间件 - 可选 [RabbitMQ / Redis] 来源: https://www.cnblogs.com/shijieli/p/12011211.html

Netty-6、Netty 线程模型

不羁的心 提交于 2019-12-09 11:03:05
1 Proactor和Reactor Proactor和Reactor是两种经典的多路复用I/O模型,主要用于在高并发、高吞吐量的环境中进行I/O处理。 I/O多路复用机制都依赖于一个事件分发器,事件分离器把接收到的客户事件分发到不同的事件处理器中,如下图: 1.1 select,poll,epoll 在操作系统级别select,poll,epoll是3个常用的I/O多路复用机制,简单了解一下将有助于我们理解Proactor和Reactor。 1.1.1 select select的原理如下: 用户程序发起读操作后,将阻塞查询读数据是否可用,直到内核准备好数据后,用户程序才会真正的读取数据。 poll与select的原理相似,用户程序都要阻塞查询事件是否就绪,但poll没有最大文件描述符的限制。 1.1.2 epoll epoll是select和poll的改进,原理图如下: epoll使用“事件”的方式通知用户程序数据就绪,并且使用内存拷贝的方式使用户程序直接读取内核准备好的数据,不用再读取数据 1.2 Proactor Proactor是一个异步I/O的多路复用模型,原理图如下: 用户发起IO操作到事件分离器 事件分离器通知操作系统进行IO操作 操作系统将数据存放到数据缓存区 操作系统通知分发器IO完成 分离器将事件分发至相应的事件处理器

Netty学习三:线程模型

本秂侑毒 提交于 2019-12-09 11:02:45
1 Proactor和Reactor Proactor和Reactor是两种经典的多路复用I/O模型,主要用于在高并发、高吞吐量的环境中进行I/O处理。 I/O多路复用机制都依赖于一个事件分发器,事件分离器把接收到的客户事件分发到不同的事件处理器中,如下图: 1.1 select,poll,epoll 在操作系统级别select,poll,epoll是3个常用的I/O多路复用机制,简单了解一下将有助于我们理解Proactor和Reactor。 1.1.1 select select的原理如下: 用户程序发起读操作后,将阻塞查询读数据是否可用,直到内核准备好数据后,用户程序才会真正的读取数据。 poll与select的原理相似,用户程序都要阻塞查询事件是否就绪,但poll没有最大文件描述符的限制。 1.1.2 epoll epoll是select和poll的改进,原理图如下: epoll使用“事件”的方式通知用户程序数据就绪,并且使用内存拷贝的方式使用户程序直接读取内核准备好的数据,不用再读取数据 1.2 Proactor Proactor是一个异步I/O的多路复用模型,原理图如下: 用户发起IO操作到事件分离器 事件分离器通知操作系统进行IO操作 操作系统将数据存放到数据缓存区 操作系统通知分发器IO完成 分离器将事件分发至相应的事件处理器