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的话是 ...
随机推荐
- Leetcode30--->Substring with Concatenation of All Words(主串中找出连接给定所有单词的子串的位置)
题目:给定一个字符串S(主串),一个字符串数组words,其中的字符串的长度相同.找到所有的子串位置,要求是words中字符串的一个连接: 举例: For example, given:s: &quo ...
- python-高级编程-03
[多进程与多线程] 调度 : 在传统计算机操作系统中 cpu的调度的基本单位是进程,随着线程的引入,线程变成操作系统的最小调度单位 而进程是作为资源的拥有单位. 并行:由于线程的引入 原先一个进程只能 ...
- dp好题 玲珑杯 Expected value of the expression
152 - Expected value of the expression Time Limit:2s Memory Limit:128MByte Submissions:135Solved:65 ...
- Linux Shell系列教程之(十)Shell for循环
本文是Linux Shell系列教程的第(十)篇,更多Linux Shell教程请看:Linux Shell系列教程 基本任何语言都有自己的循环语句,Shell当然也不例外,今天就为大家介绍下Shel ...
- iOS键盘高度的获取
代码如下: - (void)viewDidLoad { [super viewDidLoad]; //增加监听,当键盘出现或改变时收出消息 [[NSNotificationCenter default ...
- JAVA接口与抽象类区别
接口 1.接口可以继承多个接口,extends 接口1,接口2,接口3 2.接口的成员变量默认是public static abstract,必须初始化的: 3.接口只能有抽象方法,继承接口的类必须实 ...
- 【bzoj2625】[Neerc2009]Inspection 有上下界最小流
题目描述 You are in charge of a team that inspects a new ski resort. A ski resort is situated on several ...
- input最大长度限制问题
<input type="text" maxlength="5" /> //可以 <input type="number" ...
- Error querying database找不到数据库的错误可能发生的原因..
这个问题纠结了大概两个小时.原因是这样的,我刚刚换了一台新的电脑,准备把以前电脑上自己搭建的小项目放到新电脑上面,用myeclipse引入项目之后,启动项目在浏览器跑起来.然后输入账号密码登录主页,报 ...
- WebRTC VoiceEngine综合应用示例(一)——基本结构分析(转)
把自己这两天学习VoiceEngine的成果分享出来,供大家参考,有什么问题也欢迎大家指出,一起学习一起进步. 本文将对VoiceEngine的基本结构做一个分析,分析的方法是自底向上的:看一个音频编 ...