Concurrency and Application Design (二)
Dispatch Queues
dispatch queues 是基于c机制的一系列自定义任务操作。遵循先进先出的规则。每次只执行一个任务,直到上个任务完成才执行新的任务。相反的,并发的dispatch queue可以启动多个任务而不用等待其他任务执行完成。
提交给dispatch queue的任务必须是封装好的方法或者block 对象。dispatch queue是gcd技术的一部分。
Dispatch Sources
dispatch sources是基于c机制的异步系统事件。一个dispatch source封装一个特定系统事件类型信息并且当有事件发生时,给dispatch queue提交指定的block对象或者方法。可以使用dispatch sources来映射如下类型的系统事件:
Timers
Signal handlers
Descriptor-related events
Process-related events
Mach port events
Custom events that you trigger
Dispatch sources 是gcd的一部分。
Operation Queues
operation queue 是同等意义的并发dispathc queuew执行类是NSOperationQueue.然而dispatch queue总是遵循先进先出的规则,operation queues当决定任务执行次序时总是考虑其他因素。这些因素中重要的一个是是否当前的任务依赖其他任务的完成。当定义任务时你指定依赖关系就可以创建比较复杂的执行顺序。
提交给operation queue的实例必须是NSOperation class实例。一个operation 对象是一个objective c对象封装了你想执行的任务和所有需要的数据。因为nsoperation class是一个抽象类,所以需要为任务自定义subclasses。
operation对象产生key-value观察者notifications。
Asynchronous Design Techniques
需要首先考虑是否真的需要实用并发机制。因为这个更复杂更难以调试。如果设计不当反而会降低代码的运行速度和反应速度。下面就是几个设计方面的建议供参考。
第一,需要首先列举出应用程序执行的任务和每个任务对应的数据结构和对象等。如果对象的修改不会影响到其他对象那么可以并发修改这些对象。
第二,如果更改任务执行顺序会改变结果,那么可能还会使用传统的串行步骤。如果更改顺序不会影响输出,那么就应该考虑并发执行任务。而且不用担心任务过大。
Concurrency and Application Design (二)的更多相关文章
- Concurrency and Application Design
Concurrency and Application Design In the early days of computing, the maximum amount of work per un ...
- Concurrency and Application Design (三)
Operation Queues operation object是 NSOperation class实例用来封装想要执行的任务.nsoperation class是抽象类必须子类化. NSInvo ...
- Concurrency and Application Design (一)
在计算机发展的早期,单位工作时间的最高限额是一台计算机可以执行通过CPU的时钟速度确定.但是,随着技术的进步和处理器设计变得更紧凑,热等物理约束开始限制处理器的最高时钟速度.因此,芯片制造商寻找其它的 ...
- Android(Lollipop/5.0) Material Design(二) 入门指南
Material Design系列 Android(Lollipop/5.0)Material Design(一) 简介 Android(Lollipop/5.0)Material Design(二) ...
- <Effective C++>读书摘要--Inheritance and Object-Oriented Design<二>
<Item 36> Never redefine an inherited non-virtual function 1.如下代码通过不同指针调用同一个对象的同一个函数会产生不同的行为Th ...
- Java基础回顾Application(二)
application对象 1 什么是application对象 ? (1) 当Web服务器启动时,Web服务器会自动创建一个application对象.application对象一旦创建,它将一直存 ...
- Azure Cloud Application Design and Implementation Guidance performance-optimization
https://github.com/mspnp/azure-guidance https://github.com/mspnp/performance-optimization https://gi ...
- VxWorks 6.9 内核编程指导之读书笔记 -- VxWorks Kernel application (二)
#1 内核对象的静态实例化 内核对象的静态实例化 任务的静态实例化 VX_TASK宏用来在编译时声明一个任务对象.该宏带有2个参数:任务名和栈大小.不像taskSpawn函数,任务名称可以是NULL. ...
- SpringBoot 配置文件 application.properties(二)
mvc spring.mvc.async.request-timeout设定async请求的超时时间,以毫秒为单位,如果没有设置的话,以具体实现的超时时间为准,比如tomcat的servlet3的话是 ...
随机推荐
- 合肥工业大学宣城校区大学生创新创业训练项目申报书:“基于Spark平台的人工智能知识的知识图谱构建”
- Linux数据库忘记密码-修改方法
一.拥有原来的myql的root的密码: 方法一:在mysql系统外,使用mysqladmin# mysqladmin -u root -p password "test123"E ...
- poj 3107 Godfather(树的重心)
Godfather Time Limit: 2000MS Memory Limit: 65536K Total Submissions: 7885 Accepted: 2786 Descrip ...
- CodeForces 567F DP Mausoleum
本着只贴代码不写分析的题解是在耍流氓的原则,还是决定写点分析. 思路很清晰,参考的官方题解,一下文字仅对题解做一个简要翻译. 题意: 有1~n这n个数,每个数用两次.构成一个长为2n的序列,而且要求序 ...
- 小米手机安装 charles 证书,提示“没有可安装的证书”
错误环境: 1. Mac 下的 charles 2. 小米手机(MI 6 MUI 9.6 ,Android 8.x) 错误提示: 安装 charles 证书时,提示“没有可安装的证书” 解决方法: 1 ...
- socketcluster 客户端请求
<html> <head> <title>test</title> <script src="https://cdn.bootcss.c ...
- 浅析win32 Win64 x86 x64 区别 及Eclipse启动报Java was started but returned exit code=13 错误
win32.x86_64是64位 X86就是 32位系统 X64 就是64位系统 最好记得方法就是带有64的就是64位,其余都是32位 为什么要讲这个呢? 如果是绿色版本的eclipse,在打开ec ...
- python正则re模块
今日内容: 知识点一:正则 什么是正则: 就是用一系列具有特殊含义的字符组成一套规则,改规则用来描述具有某一特征的字符串 正则就是用来在一个大的字符串中取出符合规则的小字符串 为什么用正则: ...
- 【Luogu】P3745期末考试(三分)
题目链接 我是怎么把“期末考试”在本地写成“假期计划”的 qwq???? 本题把学生和卷子都排个序,按出成绩最晚时间三分. 三分之后可以O(n)的时间统计答案,因为修改卷子出成绩的时间可以贪心计划. ...
- Jersey实现Client端:GET/PUT/POST/DELETE
原文地址:Jersey客户端API调用REST风格的Web服务 [节选] 要开始使用 Jersey 客户端 API,你首先需要创建一个 com.sun.jersey .api.client.Clien ...