ios
路人戊戌乙亥
这个作者很懒,什么都没留下…
展开
-
GCD的一些分析-1
最近看了点libdispatch的源码,关于GCD中几个队列的一些代码分析,拿出来共享一下。之前有人分析过了,GCD提供很多超越传统多线程编程的优势:易用: GCD比之thread跟简单易用。由于GCD基于work unit而非像thread那样基于运算,所以GCD可以控制诸如等待任务结束、监视文件描述符、周期执行代码以及工作挂起等任务。基于block的血统导致它能极为简单得在原创 2013-12-12 11:46:28 · 2872 阅读 · 0 评论 -
变态的libDispatch源码分析-全局队列异步延时任务处理过程-原理与创建ds
延时任务的处理通常包括如下几个要素:a). 任务;b). 延时任务队列;c). 计时器,循环检测延时任务队列,若有任务到时则取出,然后执行;下面分析下GCD中关于libdispatch的延时任务处理方式。下面这部分代码是根据自身需求,封装的一个接口,基本能满足异步延时任务的处理:void _dispatch_delayed(dispatch_time_t when,原创 2014-01-20 20:49:31 · 4612 阅读 · 0 评论 -
关于一些线程锁相关的心能对比
1. 旋锁spinlock剖析与改进2. Pthreads mutex vs Pthreads spinlock原创 2014-01-16 14:53:00 · 797 阅读 · 0 评论 -
变态的libDispatch结构分析-原子操作方法
libDispatch 省去了队列锁,代替的是大量的原子操作:文件位置:libdispatch/src/hw_shims.h#if 0 && defined(__i386__) || defined(__x86_64__)#define dispatch_atomic_xchg(p, n) ({ typeof(*(p)) _r; asm("xchg %0, %1" : "=r" (_原创 2014-01-16 11:50:13 · 2442 阅读 · 0 评论 -
变态的libDispatch结构分析-全局队列
1. pthread_key_t在单线程程序中,我们经常要用到"全局变量"以实现多个函数间共享数据。在多线程环境下,由于数据空间是共享的,因此全局变量也为所有线程所共有。但有时 应用程序设计中有必要提供线程私有的全局变量,仅在某个线程中有效;但却可以跨多个函数访问,比如程序可能需要每个线程维护一个链表,而使用相同的函数操 作,最简单的办法就是使用同名而不同变量地址的线程相关数据结构。这原创 2014-01-15 19:25:08 · 3402 阅读 · 0 评论 -
变态的libDispatch结构分析-全局队列异步任务处理过程
GCD的异步方式,从插入任务到异步执行任务的代码流程。原创 2014-01-17 18:33:26 · 2349 阅读 · 0 评论 -
变态的libDispatch结构分析-全局队列同步任务处理过程
GCD的处理过程,从全局队列的同步处理任务开始。先说明一下两个宏定义#if __GNUC__#define fastpath(x) ((typeof(x))__builtin_expect((long)(x), ~0l))#define slowpath(x) ((typeof(x))__builtin_expect((long)(x), 0l))# define __bu原创 2014-01-17 16:52:07 · 2048 阅读 · 0 评论 -
变态的libDispatch源码分析-全局队列异步延时任务处理过程-设置计时器与插入ds
1. 为ds设置计时器,并将其加入到计时任务队列中(1) .入口dispatch_source_set_timer(ds, when, 0, 0);when参数由用户提供,有下面几种情况:#define DISPATCH_TIME_NOW 0#define DISPATCH_TIME_FOREVER (~0ull)0: 表示立即执行;-1: 永久等待原创 2014-01-22 11:28:50 · 2953 阅读 · 0 评论 -
变态的libDispatch结构分析-dispatch_object_s
基础类dispatch_object_s是一个透明联合体。透明联合类型削弱了C语言的类型检测机制。或者,换言之,它起到了类似强制类型转换的效果。在一定程度上打破了类型对我们的束缚,使数据以一种更底层的角度呈现在我们面前。不过这样也弱化了C语言对类型的检测,由此也可能带来一些很严重的错误。可以参看:http://nanjingabcdefg.is-programmer.com/p原创 2014-01-13 19:25:13 · 2139 阅读 · 0 评论 -
变态的libDispatch源码分析-全局队列异步延时任务处理过程-计时轮询
前文讲到了进入计时队列轮询,通过_dispatch_mgr_invoke进入到了下面这段代码:static dispatch_queue_t_dispatch_mgr_invoke(dispatch_queue_t dq){ static const struct timespec timeout_immediately = { 0, 0 }; struct timespec time原创 2014-01-22 10:40:32 · 5893 阅读 · 0 评论 -
变态的libDispatch结构分析-object结构
文件位置:libdispatch/src/object_internal.h1. 不同结构体的类型typeenum { _DISPATCH_CONTINUATION_TYPE = 0x00000, // meta-type for continuations _DISPATCH_QUEUE_TYPE = 0x10000, // meta-type for queues原创 2014-01-13 17:30:30 · 2250 阅读 · 0 评论 -
GCD的一些分析-2
将Queue中的api归类为:同步sync:disptach_sync_f异步async;disptach_async_f异步延时asyncDelayed: 暂且叫disptach_cannel取消延时disptach_source_cancel。先看看一张队列调用的关系图:这张图表明了GCD中队列的并发关系,除了globalqueue之外,其他的que原创 2013-12-12 12:36:58 · 2946 阅读 · 0 评论 -
变态的libDispatch结构分析-semaphore
文件位置:libdispatch/dispatch/semaphore.hlibdispatch/src/semaphore.c针对Dispatch的semaphore定义了三个方法:/*! * @function dispatch_semaphore_create * * @abstract * Creates new counting semaphore w原创 2014-01-16 18:32:33 · 2712 阅读 · 0 评论