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 (二)的更多相关文章

  1. Concurrency and Application Design

    Concurrency and Application Design In the early days of computing, the maximum amount of work per un ...

  2. Concurrency and Application Design (三)

    Operation Queues operation object是 NSOperation class实例用来封装想要执行的任务.nsoperation class是抽象类必须子类化. NSInvo ...

  3. Concurrency and Application Design (一)

    在计算机发展的早期,单位工作时间的最高限额是一台计算机可以执行通过CPU的时钟速度确定.但是,随着技术的进步和处理器设计变得更紧凑,热等物理约束开始限制处理器的最高时钟速度.因此,芯片制造商寻找其它的 ...

  4. Android(Lollipop/5.0) Material Design(二) 入门指南

    Material Design系列 Android(Lollipop/5.0)Material Design(一) 简介 Android(Lollipop/5.0)Material Design(二) ...

  5. <Effective C++>读书摘要--Inheritance and Object-Oriented Design<二>

    <Item 36> Never redefine an inherited non-virtual function 1.如下代码通过不同指针调用同一个对象的同一个函数会产生不同的行为Th ...

  6. Java基础回顾Application(二)

    application对象 1 什么是application对象 ? (1) 当Web服务器启动时,Web服务器会自动创建一个application对象.application对象一旦创建,它将一直存 ...

  7. Azure Cloud Application Design and Implementation Guidance performance-optimization

    https://github.com/mspnp/azure-guidance https://github.com/mspnp/performance-optimization https://gi ...

  8. VxWorks 6.9 内核编程指导之读书笔记 -- VxWorks Kernel application (二)

    #1 内核对象的静态实例化 内核对象的静态实例化 任务的静态实例化 VX_TASK宏用来在编译时声明一个任务对象.该宏带有2个参数:任务名和栈大小.不像taskSpawn函数,任务名称可以是NULL. ...

  9. SpringBoot 配置文件 application.properties(二)

    mvc spring.mvc.async.request-timeout设定async请求的超时时间,以毫秒为单位,如果没有设置的话,以具体实现的超时时间为准,比如tomcat的servlet3的话是 ...

随机推荐

  1. STM8S与IAR程序常用错误

    一.IAR中的重复定义问题 在自己写头文件时,要记得将常量定义在.c文件中,如果将常量定义在.h文件中,当在main.c或者其他地方包含该头文件时,会将头文件中的常量定义包 含到main.c中,同时, ...

  2. MySQL主从复制(Master-Slave)

    MySQL数据库自身提供的主从复制功能可以方便的实现数据的多处自动备份,实现数据库的拓展.多个数据备份不仅可以加强数据的安全性,通过实现读写分离还能进一步提升数据库的负载性能. 下图就描述了一个多个数 ...

  3. python学习-- django 2.1.7 ajax 请求

    #--------------views.py---------------------- def add(request): a = request.GET['a'] print(a) b = re ...

  4. 使用SpringMVC参数传递时,解决get请求时中文乱码的问题

    问题描述: 使用SpringMVC参数传递时, 遇到get请求中文信息时,页面应答会显示中文乱码. 解决办法: 一,  我们需要把request.getParameter(“参数名”)获取到的字符串先 ...

  5. [python][oldboy]strip

  6. [python篇][其他] python博客学习汇总

    http://blog.csdn.net/zhangxinrun/article/details/8141913

  7. [error:没有解析库]Couldn't find a tree builder with the features you requested: xml. Do you need to install a parser library?

    将代码拷贝到服务器上运行,发生错误提示需要新安装parser library. 查看代码中发现有以下内容: soup = BeautifulSoup(open(fp), 'xml') 安装解析库即可: ...

  8. ibatis 动态SQL

    直接使用JDBC一个非常普遍的问题就是动态SQL.使用参数值.参数本身和数据列都是动态SQL,通常是非常困难的.典型的解决办法就是用上一堆的IF-ELSE条件语句和一连串的字符串连接.对于这个问题,I ...

  9. DS博客作业05--树

    1.本周学习总结 1.思维导图 2.谈谈你对树结构的认识及学习体会 学完树之后,最大的感觉就是在处理节点之间的兄弟父亲关系的时候真的挺好用的,一目了然.不过,树令人比较头疼的就是要用递归,大致能懂递归 ...

  10. 数据表自动生成java代码

    MyBatis生成代码需要用到mybatis-generator-core-1.3.2.jar.数据库连接驱动包和一个xml文件,xml文件一般命令为:generator.xml. Xml内容格式如下 ...