Concurrency and Application Design (一)
在计算机发展的早期,单位工作时间的最高限额是一台计算机可以执行通过CPU的时钟速度确定。但是,随着技术的进步和处理器设计变得更紧凑,热等物理约束开始限制处理器的最高时钟速度。因此,芯片制造商寻找其它的方法来提高其芯片的整体性能。该解决方案是它们增加每个芯片上的处理器核的数量。通过增加核的数量,在单个芯片可以在不增加CPU速度或改变每秒执行更多的指令芯片尺寸和热特性。唯一的问题是如何利用其他核。
脱离线程
虽然线程已经存在了很多年,继续有其用途,他们不解决在一个可扩展的方式执行多个任务的普遍问题。使用线程,创建一个可扩展解决办法落在了开发者的身上。你必须决定创建多少线程并且根据系统变化动态调整数量。另一个问题是,你的应用程序承担大多数创建和维护线程需要的成本。而不是依赖于线程,Mac OS X和iOS采取异步设计方法来解决并发问题。异步函数已经存在于操作系统多年,并经常用于可能需要相当长时间的任务,例如从磁盘读取数据。在过去,如果一个异步函数,你想要做什么,根本不存在,你会写你自己的异步函数,并创建自己的线程。但现在,Mac OS X和iOS提供技术可以异步执行任何任务,而无需自己管理线程。
其中一个启动异步任务的技术就是GCG Grand Central Dispatch.这个技术将你通常会写到的线程管理代码移动到系统级别。你需要做的只是定义想执行的任务并把他添加到一个合适的分发队列中去。GCD负责创建需要的线程并将你的任务列入到这些线程中去。因为线程管理现在已经是系统的一部分,GCD为任务管理和执行提供整体的方法比传统线程更有效率。
执行队列是一些objective-c对象非常像分发队列。你定义好任务然后将他们添加到执行队列中,像gcd,执行队列operation queues掌握所有的线程管理,确保任务执行的又快又有效率。
下面就介绍一些关于分发队列,执行队列和一些其他相关异步技术。
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 (二)
Dispatch Queues dispatch queues 是基于c机制的一系列自定义任务操作.遵循先进先出的规则.每次只执行一个任务,直到上个任务完成才执行新的任务.相反的,并发的dispatc ...
- Azure Cloud Application Design and Implementation Guidance performance-optimization
https://github.com/mspnp/azure-guidance https://github.com/mspnp/performance-optimization https://gi ...
- Concurrency Programming Guide 并发设计指引(二)
以下翻译是本人通过谷歌工具进行翻译,并进行修正后的结果,希望能对大家有所帮助.如果您发现翻译的不正确不合适的地方,希望您能够发表评论指正,谢谢.转载请注明出处. Concurrency and App ...
- concurrencyProgrammingGuide 1
thread用来表述执行代码的独立path.os x的线程执行基于POSIX 线程API. process用来表述一个运行操作,可以包含多个线程. task用来描述工作的抽象概念. Concurren ...
- 如何学习ios(摘自知乎https://www.zhihu.com/question/20016551)
著作权归作者所有.商业转载请联系作者获得授权,非商业转载请注明出处.作者:Wang Hailong链接:https://www.zhihu.com/question/20016551/answer/1 ...
- A Pattern Language for Parallel Application Programming
A Pattern Language for Parallel Application Programming Berna L. Massingill, Timothy G. Mattson, Bev ...
- Three Sources of a Solid Object-Oriented Design
pingback :http://java.sys-con.com/node/84633?page=0,1 Object-oriented design is like an alloy consis ...
随机推荐
- cf 1006E
#include <iostream> #include <cstdio> #include <cstring> #include <string> # ...
- pandas修改列名
- [转] 重定向 CORS 跨域请求
非简单请求不可重定向,包括第一个preflight请求和第二个真正的请求都不行. 简单请求可以重定向任意多次,但如需兼容多数浏览器,只可进行一次重定向. 中间服务器应当同样配置相关 CORS 响应头. ...
- 九度oj 题目1366:栈的压入、弹出序列
题目描述: 输入两个整数序列,第一个序列表示栈的压入顺序,请判断第二个序列是否为该栈的弹出顺序.假设压入栈的所有数字均不相等.例如序列1,2,3,4,5是某栈的压入顺序,序列4,5,3,2,1是该压栈 ...
- kb-07线段树-03--区间修改查询--lazy思想
/* 区间修改,区间查询和: 第一次使用lazy思想: poj3468 */ #include<iostream> #include<cstdio> #include<c ...
- BZOJ1226 [SDOI2009]学校食堂Dining 【状压dp】
题目 小F 的学校在城市的一个偏僻角落,所有学生都只好在学校吃饭.学校有一个食堂,虽然简陋,但食堂大厨总能做出让同学们满意的菜肴.当然,不同的人口味也不一定相同,但每个人的口味都可以用一个非负整数表示 ...
- mybatis学习(十)——缓存介绍
与Hibernate一样,MyBatis 也提供了一级缓存和二级缓存的支持. 1.一级缓存:(本地缓存)SqlSession级别的缓存,默认一直开启的 , 与数据库同一次会话期间的数据会放到本地缓存中 ...
- 学习 WebService 第三步:一个简单的实例(RAD+WAS 8.5开发SOAP项目)
[开发环境] Web Service 服务器端开发工具:RAD(Eclipse内核) Web Service 服务器:IBM WebSphere v8.5 REST/SOAP:SOAP(JAX-WS/ ...
- java捕获不到存储过程里面手抛的错误
采用spring的JDBCTemplate来操作增删查改,Basedao执行存储过程的方法如下: 此方法要么返回一个true,要么抛出异常: 现象: 当项目发布于tomcat中时,同样的代码,同样的过 ...
- FZOJ Problem 2110 Star
...