
iOS 多线程
直隶码农
coding
展开
-
iOS开发多线程篇—GCD介绍
一、简单介绍1.什么是GCD?全称是Grand Central Dispatch,可译为“牛逼的中枢调度器”纯C语言,提供了非常多强大的函数 2.GCD的优势GCD是苹果公司为多核的并行运算提出的解决方案GCD会自动利用更多的CPU内核(比如双核、四核)GCD会自动管理线程的生命周期(创建线程、调度任务、销毁线程)程序员只需要转载 2016-01-16 23:07:29 · 489 阅读 · 0 评论 -
iOS 用队列实现读写线程安全
读写操作时,为了提高效率,应该允许同时多个线程读操作,并且只有一个线程写操作。为了实现上面功能,将读和写分发到相同并发队列中,这样读操作会是并发的;而写操作,以 dispatch barrier 来保证同时只有一个线程可以执行写操作,并且由于写操作无需返回,写操作异步执行。代码如下:dispatch_queue_t syncQueue =dispatch_get_globa原创 2017-02-14 23:14:49 · 3149 阅读 · 1 评论 -
iOS 并行编程:GCD Dispatch Sources
1 简介 dispatch source是一种用于处理事件的数据类型,这些被处理的事件为操作系统中的底层级别。Grand Central Dispatch(GCD)支持如下的dispatch sources类型: Timer dispatch sources:定时器类型,能够产生周期性的通知事件; Signal dispatch sources:信号类型,当转载 2017-02-09 17:06:33 · 458 阅读 · 0 评论 -
GCD入门(四): 完结
Dispatch Queue挂起dispatch queue可以被挂起和恢复。使用 dispatch_suspend函数来挂起,使用 dispatch_resume 函数来恢复。这两个函数的行为是如你所愿的。另外,这两个函数也可以用于dispatch source。一个要注意的地方是,dispatch queue的挂起是block粒度的。换句话说,挂起一个queue并不会转载 2017-02-09 16:15:50 · 250 阅读 · 0 评论 -
GCD入门(三): Dispatch Sources
何为Dispatch Sources简单来说,dispatch source是一个监视某些类型事件的对象。当这些事件发生时,它自动将一个block放入一个dispatch queue的执行例程中。说的貌似有点不清不楚。我们到底讨论哪些事件类型?下面是GCD 10.6.0版本支持的事件:Mach port send right state changes.Ma转载 2017-02-09 16:15:06 · 223 阅读 · 0 评论 -
GCD入门(二): 多核心的性能
概念为了在单一进程中充分发挥多核的优势,我们有必要使用多线程技术(我们没必要去提多进程,这玩意儿和GCD没关系)。在低层,GCD全局dispatch queue仅仅是工作线程池的抽象。这些队列中的Block一旦可用,就会被dispatch到工作线程中。提交至用户队列的Block最终也会通过全局队列进入相同的工作线程池(除非你的用户队列的目标是主线程,但是为了提高运行速度,我们绝不会这么干)转载 2017-02-09 16:14:35 · 240 阅读 · 0 评论 -
GCD入门(一): 基本概念和Dispatch Queue
什么是GCD?Grand Central Dispatch或者GCD,是一套低层API,提供了一种新的方法来进行并发程序编写。从基本功能上讲,GCD有点像NSOperationQueue,他们都允许程序将任务切分为多个单一任务然后提交至工作队列来并发地或者串行地执行。GCD比之NSOpertionQueue更底层更高效,并且它不是Cocoa框架的一部分。除了代码的平行执行能力,GC转载 2017-02-09 16:06:57 · 224 阅读 · 0 评论 -
多线程 - NSOperationQueue
一、简介一个NSOperation对象可以通过调用start方法来执行任务,默认是同步执行的。也可以将NSOperation添加到一个NSOperationQueue(操作队列)中去执行,而且是异步执行的。创建一个操作队列:[java] view plain copyNSOperationQueue *queue = [[NS转载 2017-02-06 12:36:56 · 282 阅读 · 0 评论 -
iOS开发系列–信号量
我们在处理一系列线程的时候,当数量达到一定量,在以前我们可能会选择使用NSOperationQueue来处理并发控制,但如何在GCD中快速的控制并发呢?答案就是dispatch_semaphore信号量是一个整形值并且具有一个初始计数值,并且支持两个操作:信号通知和等待。当一个信号量被信号通知,其计数会被增加。当一个线程在一个信号量上等待时,线程会被阻塞(如果有必要的话),直至计数器大于零转载 2016-12-22 18:41:36 · 488 阅读 · 0 评论 -
C++实现多线程读写锁
在Win32下用C++实现多线程读写锁 读写锁实际是一种特殊的自旋锁,它把对共享资源的访问者划分成读者和写者,读者只对共享资源进行读访问,写者则需要对共享资源进行写操作。这种锁相对于自旋锁而言,能提高并发性,因为在多处理器系统中,它允许同时有多个读者来访问共享资源,最大可能的读者数为实际的逻辑CPU数。写者是排他性的,一个读写锁同时只能有一个写者或多个读者(与CPU数相关),但不能同转载 2016-12-22 18:18:54 · 3918 阅读 · 0 评论 -
iOS 多线程同步 锁
在iOS中有几种方法来解决多线程访问同一个内存地址的互斥同步问题:方法一,@synchronized(id anObject),(最简单的方法)会自动对参数对象加锁,保证临界区内的代码线程安全[cpp] view plain copy print?@synchronized(self) { /转载 2016-11-30 16:26:19 · 341 阅读 · 0 评论 -
多线程基础基础
一 NSThread-(void)testThread1 { NSString*param = @"Task test"; NSThread*thread = [[NSThread alloc] initWithTarget:self selector:@selector(onExecuteTask1:)object:param];原创 2016-01-02 23:55:50 · 517 阅读 · 0 评论 -
GCD 基础
Grand Central Dispatch (GCD)是Apple开发的一个多核编程的解决方法。dispatch queue分成以下三种:1)运行在主线程的Main queue,通过dispatch_get_main_queue获取。2)并行队列global dispatch queue,通过dispatch_get_global_queue获取,由系统创建三个不同优先级原创 2016-01-08 00:50:50 · 482 阅读 · 0 评论 -
iOS中保证线程安全的几种方式与性能对比
一、前言前段时间看了几个开源项目,发现他们保持线程同步的方式各不相同,有@synchronized、NSLock、dispatch_semaphore、NSCondition、pthread_mutex、OSSpinLock。后来网上查了一下,发现他们的实现机制各不相同,性能也各不一样。不好意思,我们平常使用最多的@synchronized是性能最差的。下面我们先分别介绍每个加锁方式的使用转载 2017-10-14 14:50:53 · 343 阅读 · 0 评论