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的话是 ...
随机推荐
- Linux学习-透过 systemctl 管理服务
透过 systemctl 管理单一服务 (service unit) 的启动/开机启动与观察状态 一般来说,服务的启动有两个阶段,一 个是『开机的时候设定要不要启动这个服务』, 以及『你现在要不要启动 ...
- strcpy和strncpy用法和区别
1. strcpy函数:顾名思义字符串复制函数:原型:extern char *strcpy(char *dest,char *src); 功能:把从src地址开始且含有NULL结束符的字符串赋值到以 ...
- python基础学习笔记——运算符
计算机可以进行的运算有很多种,可不只加减乘除这么简单,运算按种类可分为算数运算.比较运算.逻辑运算.赋值运算.成员运算.身份运算.位运算,今天我们暂只学习算数运算.比较运算.逻辑运算.赋值运算 算数运 ...
- BugBash活动分享
此文已由作者夏君授权网易云社区发布. 欢迎访问网易云社区,了解更多网易技术产品运营经验. BugBash源至微软概念,翻译为<缺陷大扫除>,顾名思义是集中大家力量全面清扫Bug,确保产品质 ...
- python之路 --- python文件模式
文件模式: 打开文件的模式有: r,只读模式(默认). w,只写模式.[不可读:不存在则创建:存在则删除内容:] a,追加模式.[可读: 不存在则创建:存在则只追加内容:] "+&quo ...
- python补漏----isinstance 和 issubclass
一.isinstance Python 中的isinstance函数 isinstance是Python中的一个内建函数 语法: isinstance(object, classinfo) 如果参数o ...
- Python 调用multiprocessing模块下面的Process类方法(实现服务器、客户端并发)-UDP协议
#基于UDP协议的multiprocessing自定义通信 服务端: from multiprocessing import Process import socket def task(server ...
- aiomysql inserting operation failed !
emotions: those days,i am using aiomysql(python3.5) to acess my database .But a 'strange' problem ma ...
- BZOJ4259 残缺的字符串 【fft】
题目 很久很久以前,在你刚刚学习字符串匹配的时候,有两个仅包含小写字母的字符串A和B,其中A串长度为m,B串长度为n.可当你现在再次碰到这两个串时,这两个串已经老化了,每个串都有不同程度的残缺. 你想 ...
- CentOS7 修改时区、charset
1. 修改时区 ln -sf /usr/share/zoneinfo/Asia/Shanghai /etc/localtime 经过这番修改后,JAVA启动后自动使用了Shanghai作为时区. 2. ...