linux单个core的线程,正确使用Core Data多线程的3种方式
在 #Pragma Conference 2015 会议上,Marcus Zarra,撰写过关于 Core Data 和 Core Animation 的书, 叙述 了三种在多线程环境下使用 Core Data 的方法并且设法解决在2015年应如何使用Core Data的问题。实际上,Zarras说道,当用一个拥有十一年历史的技术比如Core Data工作时,你所面临的问题之一是有大量的信息是可用的,不过查明哪一份信息依旧精确以及哪一份不精确并不是一件简单的事。
根据Zarras所言,当我们知道我们仍旧有空余的CPU时我们应该使用多线程,那样我们可以预先处理用户接下来要使用的数据。多线程另外一个很 重要的用例是通过允许用户不必等待一个冗长的操作来完成,来改进一个app的灵敏程度,比如网络操作。多线程几乎从来不是解决性能问题的办法并且它是一种 基础设计决策,而不是一个事后的想法。
最初的方法
最初的方法是在iOS 6推出之前唯一可用的方法。这个方法现在依然可以使用,尽管Zarra建议除了在某些极端情况以外不要使用它。它基于四个主要的原则:
一个 NSPersistentStoreCoordinator (PSC)处理所有磁盘之间的相互影响。
NSManagedObjectContext s (MOCs)与PSC对话并且不知道对方的任何情况。
其中一个MOCs负责UI的更新并且在单一可信来源上起作用。
一个MOC开始意识到另一个MOC的变化的唯一方法是通过 merging 合并处理一个 NSNotification 。
这个设计有一些不足之处,比如需要写很多公式化的代码,线程规则不明确会导致不定时发生崩溃以及意外线程阻塞。随着推出了iOS 8,这些问题改善了一些。并且多亏了一个 debug flag 调试标志,Yosemite才能在它违反Core Data并发模型的时候让应用程序崩溃。
艰难的方法
Zarras称之为艰难的方法的是一个依赖于用于多进程访问SQLite的方法。这就意味着我们可以拥有多个PSC,让每个MOC都可以拥有自己 的PSC。这会对摆脱任何锁定问题起到很好的作用并且启用几乎所有异步访问——除非你没有写相同的表以及同时把两个PSC排成一行。
即使有了这个设计,只用一个MOC来把数据反馈到UI是可取的。这个方法会让用PSC来同步数据变得艰难,因为它们不知道对方的任何情况。此外,线程和可维护性也会被损害。这个方法有趣的一面在于,这就是iCloud如何运作的真实写照。
最好的方法
根据Zarra所言,最好的办法并不是速度最快的,但它是到目前为止最简单和最可持续的方法。它依靠苹果和iOS 6一起推出的 new APIs ,new APIs允许定义子MOC并且详细描述一个MOC的并发类型。Zarra呈现的这个设计是基于 NSManagedDocument 如何运作和使用的:
一个单独的持久性数据协调器。
唯一能实际访问PSC的一个私有的MOC。
一个主要的MOC联合UI,它是私有的MOC的子设备。
多个子MOC具体到辅助线程。
这个设计的好处是子MOC所有的变化会自动传送到其主MOC上,因此消除了合并的需求。
这个设计的主要缺陷是它速度缓慢,尽管只是慢了百分之几,Zarra说道。它有一个很棘手的问题就是如果进行太多的异步操作,有可能会在UI上起连锁反应,因为其相关的MOC会受到序列的多重变化,这可能与另一个并不相干。
这个设计一个很重要的细节就是最好不要重复使用很便宜就能创造的子MOC。另一方面,能用很久的子MOC应该与主MOC手动保持同步,因为变化仅仅是从子MOC到主MOC而反之则不行。
Zarra的最后评论是使用 NSManagedDocument 会锁定UI,所以你最好 做好准备 。
linux单个core的线程,正确使用Core Data多线程的3种方式相关推荐
- 正确使用Core Data多线程的3种方式
在#Pragma Conference 2015会议上,Marcus Zarra,撰写过关于Core Data和Core Animation的书,叙述了三种在多线程环境下使用Core Data的方法并 ...
- linux+Qt 下利用D-Bus进行进程间高效通信的三种方式
linux+Qt 下利用D-Bus进行进程间高效通信的三种方式 原文链接: https://www.cnblogs.com/wwang/archive/2010/10/27/1862552.html ...
- 对Java多线程编程的初步了解,实现多线程的三种方式以及多线程并发安全的线程同步机制
什么叫进程?什么叫线程? 进程相当于一个应用程序,线程就是进程中的一个应用场景或者说是一个执行单元,一个进程可以启动多个线程,每个线程执行不同的任务,一个线程不能单独存在,他必须是进程的一部分,当进程 ...
- 【Java_多线程并发编程】基础篇—线程状态及实现多线程的两种方式
1.Java多线程的概念 同一时间段内,位于同一处理器上多个已开启但未执行完毕的线程叫做多线程.他们通过轮寻获得CPU处理时间,从而在宏观上构成一种同时在执行的假象,实质上在任意时刻只有一个线程获得C ...
- linux 切换用户_Linux 用户态切换到内核态的 3 种方式
系统调用 这是用户态进程主动要求切换到内核态的一种方式,用户态进程通过系统调用申请使用操作系统提供的服务程序完成工作,比如 fork() 实际上就是执行了一个创建新进程的系统调用.而系统调用的机制其核 ...
- 2019-8-19 [Linux] 3.为什么要修改静态IP IP的获取有几种方式 设置静态IP后无法Ping百度怎么办 可以ping后CRT无法连接怎么办
文章目录 3.修改linux系统的静态IP 问题1 : 为什么要修改静态IP? 问题2 : IP的获取有几种方式? 手动或者自动 验证是否可以正常上网 ping一下百度 看一下是否可以正常上网 问题3 ...
- Linux系统编程30:进程信号之产生信号的四种方式(Core Dump,kill,raise)
文章目录 (1)通过按键产生信号-Core Dump (2)调用系统函数向进程发送信号 A:kill B:raise C:abort (3)由软件条件产生信号 (4)硬件异常产生信号 总结: 为了方便 ...
- linux windows文件 编码_Linux与Windows实现文件交互的几种方式
对于很多人来说,都有自己的Windows与工作用的Linux,在项目进行过程中难免需要在这两个系统之间传输文件,以下列举几种本人知道并测试过的几种文件交互方式. 1.Ubuntu子系统 随着Windo ...
- java线程的实现方法_Java多线程的四种实现方式
1.Java多线程实现的方式有四种: 1.继承Thread类,重写run方法 2.实现Runnable接口,重写run方法,实现Runnable接口的实现类的实例对象作为Thread构造函数的targ ...
最新文章
- 2021年腾讯云安装Docker最简洁方法
- OSChina 周一乱弹 —— 把朋友圈的锦鲤全都抓走
- 20165203第四周考试
- python字符串类型_python字符串类型介绍
- 中国汽车产销量负增长 工信部:不见得是坏事 将推新政策
- VS2010安装Nuget提示签名不匹配错误解决办法
- 组合模式_设计模式结构性:组合模式(CompositePattern)
- hive创建分区表 指定分隔符_HIVE 对于分区表的操作
- 怎么自学python-你是如何自学 Python 的?
- NIO流程记录(非源码,单reacter单线程)
- css里面设置body背景图片满屏
- Ubuntu16.04装机2:安装CUDA10.2+cuDNN7.6.5
- linux访问vdma的数据,Xilinx VDMA 24位流输出与32位AXI总线的内存流数据关系
- 软件测试作业随笔之二:Homework 2
- 计算机病毒及解决方法,3种电脑病毒及解决方法
- 指纹识别算法的matlab实现
- Unity3D 多层血条特效
- 小熊派·叔BearPi-HM Micro环境搭建(双系统)
- H264解码过滤花屏视频帧
- e-Learning e-learning 创造竞争优势
热门文章
- SAP云平台上两个ABAP系统实例之间的互连
- how is metadata got - DB table iwfndi_med_srh and IWFNDCL_MGW_REQUEST_MANAG
- CRM WebClient UI错误消息的两种显示方式比较
- Cloud for Customer里的使用的一个第三方js库,用于gzip处理
- 使用Adobe Lifecycle ES将若干个word合并成一个PDF
- why the SalesOrder header note is read only
- BAdI to control ALV grid display
- 前端开发神器Sublime里如何设置JSlint
- oauth_client_details的值怎么添加_PowerBI计算列与度量值
- python在福州能找到工作吗_如果只会Python能不能找到工作