iOS并发编程(一)-简介

2023-11-04

“一个菜鸟的自我修养,就是在低级职位上不抓狂,当一个优秀的菜鸟,就是为了有一天不当菜鸟。瞅准机会迅速脱离菜鸟轨道,然后一路飞翔到世界的尽头。“

接下来系统的学习下并发编程,会有几篇吧,不多说,走起!    

简介:

     1.异步设计方式:

传统并发编程模型是线程,ios采用“异步设计方式”来解决并发的问题;-也就是一个线程中多核的使用,异步实现并发编程;

     2.引入异步线程的方式有两个:

     1)Grand Central Dispatch(GCD):

     系统管理线程,不需要编写线程代码;

     只需要定义想要执行的任务,然后添加到合适的dispatch queue中,GCD负责创建线程和调度;

     2)Operation Queue:

     OC对象,类似dispatch queue;

     定义想要执行的任务,并添加到operation queue,后者负责调度和执行;

     和GCD一样,Operation Queue也管理了线程,较高效;

     3.Dispatch queue:

     基于C的执行自定义任务机制;

     dispatch queue按照先进先出的顺序,串行或并发地执行任务;

     串行:serial dispatch queue一次只能执行一个任务;

     并发:concurrent dispatch queue则尽可能多地启动任务并发执行; 

     优点:

     1)直观而简单的编程接口;

     2)提供自动和整体的线程池管理;

     3)提供汇编级调优的速度;

     4)更加高效的使用内存;

     5)不会trap 内核 under load;

     6)异步分派任务到dispatch queue 不会导致queue死锁;

     7)伸缩性强;

     8)serial dispatch queue比锁和其他同步原语更加高效;

     4.Dispatch Sources:

     Dispatch Source是基于C的系统事件异步处理机制;

     一个Dispatch Source封装了一个特定类型的系统事件,当事件发生时提交一个特定的block对象或函数到dispatch queue;

     可以使用Dispatch Source监控以下类型的系统事件:

     1)定时器;

     2)信号处理器;

     3)描述符相关的事件;

     4)进程相关的事件;

     5)Mach port事件;

     6)你触发的自定义事件;

     5.Operation Queues:

     Operation Queues是Cocoa版本的并发dispatch queue,由NSOperationQueue类实现;

     dispatch queue是按先入先出执行,Operation Queues在执行顺序上,还会考虑其他因素,其中之一就是,指定任务是否依赖于另一个任务的完成;

     在定义任务时配置依赖性,以创建复杂的任务执行顺序图;

     提交到Operation Queues的任务必须是NSOperation对象,operation object封装了要执行的工作,以及所需数据;

     NSOperation是抽象基类,通常需要自定义子类执行任务;

     Foundation framework提供了一些具体的子类,可用于创建并执行相关任务;

     Operation objects会产生key-value observing(KVO)通知,可用于监控进程;

     Operation queue总是并发的执行任务,可以使用依赖,确保顺序执行;

     6.异步设计技术:

     通过确保主线程自由响应用户事件,并发可以很好地提高应用的响应性;

     通过将工作分配到多核,提高应用处理性能;

     会带来额外开销,代码也会复杂,难以编写和调试;


总结:

这部分内容其实包含了所有相关的内容,待学习完各部分内容,建议回顾下。



本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

iOS并发编程(一)-简介 的相关文章

  • Flutter:“UIAlertView”已弃用:首先在 iOS 9.0 中弃用

    我收到以下错误 Users flo pub cache hosted pub dartlang org image picker 0 6 7 12 ios Classes FLTImagePickerPlugin m 1 49 20 war
  • 标签栏不显示图标?

    我读了一堆相关的问题 我尝试了他们所说的 但没有任何效果 不知道为什么 所以 我有3个不同的UIStoryboards 第一个是处理登录 注册的 Auth Storyboard 并且有一个对第二个 Storyboard 选项卡栏 Story
  • 在 UIPageViewController 中跟踪页面索引的可靠方法 - Swift

    我在位于常规 UIViewController 中的容器内有一个 UIPageViewController 自定义 我需要能够在每次页面更改时调用一个事件 但前提是它确实发生了变化 而不仅仅是一半或类似的事情 using func page
  • WKWebView 上的链接点击侦听器?

    WKWebView 类中是否存在类似 onLinkClickListener 的东西 我尝试用谷歌搜索但一无所获 我还在类似类型的 stackoverflow 上发现了一些未解答的问题 我需要 linkClickListener 的原因是
  • AVAssetWriter 如何编写下采样/压缩的 m4a/mp3 文件

    我正在尝试获取本地 m4a 或 mp3 文件并压缩 下采样该文件 为了制作更小的文件 最初 我使用 AVAssetExportSession 将 AVAsset 导出到临时目录 但我对压缩 下采样没有任何控制 您只能使用预设 其中只有 wa
  • iOS WebView 空白

    我已使用 YouTube 的标准嵌入网址在我的 iOS 8 3 应用程序中嵌入了 YouTube 视频 sample http www youtube com embed HkAK9QRe4ds 它按预期工作 但看起来很奇怪 那个白色间隙
  • SwiftUI 从一个列表拖动到另一个列表

    我正在尝试在列表之间拖放 我尝试过的 我找到了一个在 UIKIt 中执行此操作并使用 UIViewControllerRepresentable 的解决方案 但这不是我想要的 另一个解决方案是在列表上使用 onDrag 但这在 iPad 上
  • iOS 联系人 如何通过电话号码获取联系人

    我只想通过电话号码获取联系人姓名 我尝试过这个 但速度太慢 CPU 速度超过 120 let contactStore CNContactStore let keys CNContactGivenNameKey CNContactFamil
  • AF网络3问题

    In AFNetworking3 表示我使用的 SSL 证书无效验证证书链 false 但现在看来该字段已被删除 我无法向我的服务器发出请求 这是请求类 import UIKit import AFNetworking class Clie
  • Google 地图 ios:Mapview 路线垂直折线始终指向位置箭头的北部或顶部

    我已经在我的应用程序中实现了 Google Maps IOS 的基本功能 我必须将地图视图的方位设置为始终指向顶部或北部 我需要 如果我点击导航按钮 地图视图应该动画到位置箭头顶部 就像谷歌地图 ios 应用程序一样 箭头应始终固定并指向北
  • SwiftUI 关闭多个模态表

    我在用 sheet isPresented self showModal 在我的根视图中呈现一个模式 在模态中 我正在使用NavigationView引导用户浏览各个页面 对于用户配置文件构建器 在导航堆栈的最后一页中 我正在使用 Envi
  • Captive Wifi 弹出窗口:单击链接打开 Safari

    我们的 iOS 设备 ipad iphone 等 网络出现问题 连接到 SSID 后 iphone ipad 立即打开强制网络助手 CNA 它就像一个缩小版的浏览器 没有导航按钮等 显示我们的欢迎页面 准备好让用户在网络中验证他的 MAC
  • 在 iPhone 的日期选择器中插入空白值

    我有一个日期选择器 使用操作表显示 我想在日期选择器中插入一个空白值并将其设置为默认值 它应该仅根据用户选择而改变 这可能吗 如果是的话怎么办 感谢所有宝贵的建议 UIDatePicker 仅支持某些模式 并且不允许这种自定义 将空白或自定
  • 文件是为存档而构建的,这不是正在链接的体系结构(i386)

    我必须构建静态库 我想在我的 iPhone 和 iPad 应用程序中使用 当我尝试运行模拟器时 出现链接错误 我是 iOS 开发新手 请帮忙 ld 警告 忽略文件 Users valuelabs Desktop DruvaProject l
  • 如何在 iPhone 上缩小 UIPickerView?

    我想降低一个高度UIPickerView在我的 iPhone 应用程序中 使其仅显示一行和一列 选择器视图的高度应等于行的高度 我正在使用 Interface Builder 来构建UIPickerView 但我找不到调整此控件大小的简单方
  • 使用 OCMock 以代码块作为参数的存根方法

    有没有一种方法可以存根方法 以块作为参数 例如方法 void reverseGeocodeLocation CLLocation location completionHandler CLGeocodeCompletionHandler c
  • 我安排一个计时器使用 readRSSI 函数读取 RSSI,但是当我的应用程序进入后台时计时器停止

    我安排一个计时器使用 readRSSI 函数读取 RSSI 但是当我的应用程序进入后台时计时器停止 也许有一个好方法可以在应用程序进入后台时从外围设备的通知中获取 RSSI 值 但我不知道该怎么办 有人可以帮助我吗 有人有更好的方法吗 我也
  • 如何通过GPUImage调整图像的亮度和对比度?

    我编写了一种使用亮度因子和对比度因子过滤图像的方法 如下所示 UIImage image UIImage image withBrightness float brightness contrast float contrast GPUIm
  • Siri - 联系人搜索行为类似于 Skype 的音频通话

    我正在实现一个 VoIP 应用程序 我需要通过 Siri 发起呼叫 我能够通过 Siri 发起呼叫 但问题是 每次启动应用程序时 尽管联系人不在应用程序的联系人列表中 我不知道如何以及在哪里处理这个问题 我的意思是 如果应用程序没有像 Sk
  • 在 iOS 上保存(私人)应用程序设置?

    我知道NSUserDefaults用于保存 恢复user优先 什么是等效类应用 例如 应用程序可能有一个 上次运行 字段 或者它可能有一个用于在应用程序级别使用的设备的唯一标识的字段 我的目的是将应用程序的设置 而不是用户的设置 保留在设置

随机推荐

  • keil编译错误:ERROR L250: CODE SIZE LIMIT IN RESTRICTED VERSION EXCEEDED

    出现这个错误 很多网上都说是没注册成功导致的 注册成功的话会在keil的菜单栏 help gt about 里看到如下的显示 我的keil里about显示注册成功了 但还是出现错误提示 ERROR L250 CODE SIZE LIMIT
  • AI 时代来临,这些 AI 工具让你的工作更加高效!

    在这篇文章中 我们将介绍一些有趣的人工智能应用 这些应用涵盖了不同的领域 包括图像生成 文本处理 决策辅助等 以下是这些应用的具体介绍和文本链接 AI 生成图标工具 iconifyai是一个AI生成App图标的产品 价格每15个图标约10美
  • codeforces 1186d D. Vus the Cossack and Numbers

    题意 和为0的n个double数 上下取整后和还为0的构造一个 首先都下取整 结果肯定 lt 0 和加起来再取绝对值num 则有num个数要上取整 那么小数部分为0的不变 不为0的挑num个上取整 其他的下取整 另外floor ceil r
  • JMM内存模型、JMM内存间交互操作

    主内存与工作内存 JMM内存间交互操作 关于主内存与工作内存之间具体的交互协议 即一个变量如何从主内存拷贝到工作内存 如何从工作内存同步回主内存这一类的实现细节 Java内存模型中定义了以下8种操作来完成 Java虚拟机实现时必须保证下面提
  • 配置接口IP地址并通过静态路由、默认路由配置实现全网互通!

    配置接口IP地址并通过静态路由 默认路由配置实现全网互通1 对Router R1 R3进行默认路由配置 R2为静态路由配置 2 配置好PC机的IP地址 子网
  • Can‘t use an undefined value as an ARRAY reference at probe2symbol

    Can t use an undefined value as an ARRAY reference at probe2symbol 有时间限制 过了时间就不行 把所有诸如if samp1e 5 gt 118 next 删掉 就可以了 这句
  • golang返回值为interface{}的类型判断

    大家知道 golang对于不确定返回值可以用interface 代替 这确实很方便 但是也带来了问题 那就是如何判断返回值是什么类型的 其实可以用反射也就是reflect来判断 通过函数 reflect TypeOf 1 即返回类型 本文参
  • Qt学习之二——QPushButton按钮用法

    目录 1 QPushButton按钮简介 2 三个构造函数 3 QPushButton常用属性 4 QPushButton常用方法 5 QPushButton按钮的信号与槽 1 QPushButton按钮简介 QPushButton是普通按
  • Vlc播放rtsp视频

    Vlc播放rtsp视频 网上的例子不少 我看后觉得有点不足的地方 就是他们没有设置播放rtsp视频时的参数 参数设置对播放网络视频是很重要的 如果设置不当 或不设置 可能你的程序就播放不了rtsp视频了 说下开发步骤吧 挺简单的 我的环境
  • 分布式消息队列RocketMQ&Kafka -- 消息的“顺序消费”-- 一个看似简单的复杂问题

    在说到消息中间件的时候 我们通常都会谈到一个特性 消息的顺序消费问题 这个问题看起来很简单 Producer发送消息1 2 3 Consumer按1 2 3 顺序消费 但实际情况却是 无论RocketMQ 还是Kafka 缺省都不保证消息的
  • 初学者怎样看懂代码_糖说:不懂代码的我们如何看代码?

    大家新年好啊 先给各位老板们拜个年 这两天写的大家不是很爱看 可能大家还是喜欢看一些故事性的东西 那么在以后的韭爷说里一定会加大对于故事板块儿的输出的 现在我们还是继续今天的内容吧 有始有终 不懂代码的我们如何看代码 这是一个问题 因为笔者
  • 【Android取证篇】华为设备无法识别解决方案

    Android取证篇 华为设备无法识别解决方案 以鸿蒙系统的开发者模式设置展示 和安卓的设置情况一样 suy 文章目录 Android取证篇 华为设备无法识别解决方案 华为设备无法识别 一 正常打开方式 1 开发者模式 2 USB配置 仅充
  • 最新ChatGPT网站AI系统源码+详细图文搭建教程/支持GPT4.0/AI绘画/H5端/Prompt知识库/

    一 前言 SparkAi系统是基于国外很火的ChatGPT进行开发的Ai智能问答系统 本期针对源码系统整体测试下来非常完美 可以说SparkAi是目前国内一款的ChatGPT对接OpenAI软件系统 那么如何搭建部署AI创作ChatGPT
  • 2017-06-12 每日一记 Linux的root密码修改

    在ubuntu中 1 1 切换root用户 sudo su 然后输入sudo密码 su root 然后输入root密码 1 2 切换其他用户 su 用户名 修改root用户密码 需要记得sudo密码 首先sudo su 输入普通用户密码 进
  • 页面加载与iframe加载函数

  • 运算放大器基础知识

    文章目录 前言 一 运放内部电路原理 二 运放的参数和特性 1 输入输出特性曲线 2 主要参数 三 运放常用应用 1 加法器 2 减法器 3 读书电路和指数电路 4 乘法器和除法器 5 乘方和开平方根电路 6 积分电路 7 微分电路 8 P
  • Spring-Boot添加MyBatis:手动添加代码方式

    创建了一个MySQL数据库 并添加了一张表 添加MyBatis后 有两种使用方式 注解方式 简单快速 适合规模较小的数据库 xml配置方式 支持动态生成SQL 调整SQL更方便 适合大型数据库 无论哪种方式 都需要共同执行的前期工作 在po
  • Raspberry Pi运行Arduino Sketch

    在本文中 您将学习如何在Raspberry Pi上运行为Arduino编写的sketch 这将使我们能够将Arduino代码编译为可以在Raspberry Pi上运行的二进制文件 但是在我们这样做之前 我们必须在Arduino IDE和Ra
  • 剑指Offer第五十九题:按之字顺序打印二叉树

    题目描述 请实现一个函数按照之字形打印二叉树 即第一行按照从左到右的顺序打印 第二层按照从右至左的顺序打印 第三行按照从左到右的顺序打印 其他行以此类推 思路 1 第一种按照层序遍历 然后偶数行 默认从第一行开始 翻转即可 层序遍历和翻转可
  • iOS并发编程(一)-简介

    一个菜鸟的自我修养 就是在低级职位上不抓狂 当一个优秀的菜鸟 就是为了有一天不当菜鸟 瞅准机会迅速脱离菜鸟轨道 然后一路飞翔到世界的尽头 接下来系统的学习下并发编程 会有几篇吧 不多说 走起 简介 1 异步设计方式 传统并发编程模型是线程