美文网首页
多线程理解及GCD的同步异步操作

多线程理解及GCD的同步异步操作

作者: 改个低调点的名字 | 来源:发表于2017-02-11 19:02 被阅读0次

先说明今天的疑问
在做FMDB的本地存储,查询了解到,FMDB在多线程访问数据库,针对线程安全上,使用过了FMDatabaseQueue类进行实例化数据库。FMDatabaseQueue有两个常用方法:

- (void)inTransaction:(void (^)(FMDatabase *db, BOOL *rollback))block

- (void)inDatabase:(void (^)(FMDatabase *db))block

这两个方法实际上都是通过GCD创建一个串行队列,这样,每次的数据库操作,都在这个串行队列中完成,达到线程安全的目的。

inDatabase方法实现 inTransaction方法实现

到此都没有任何毛病
但是我自己的毛病出来了
“既然FMDB是自己创建的queue,那也就是在主线程外的其他线程中执行的,就不用在做后台操作数据库的处理了。”这是我想的。
由于对线程队列的理解不够透彻,在我的意识里,GCD中,除去main_queue之外,用户通过dispatch_queue_create创建的队列(包括同步和异步队列),GCD给我们的全局队列dispatch_get_global_queue,都是不会再主线程去执行任务的。
简化就是,我以为(注意,是“我以为”)只有main_queue才会在主线程执行任务,其他的队列都是在其他线程执行任务。

NSError

我上边说的我以为,我意识的都是错的。

任务在哪个线程执行,与队列关系不大(也是有一定关系,后面说),主要看这个任务代码,是同步执行还是异步执行。

queue只是一个管理任务的数组,他所能控制的是任务的顺序执行还是一起执行
同步异步才能决定我们是否开启新线程,上图说比较清晰

基础概念 这几个词对应的东西能干什么 组合效果

这里就不一一列举各种情况了,文章最后会给出上边三张图的原著,下边只是简单的截一个自己测试的图

很明显了
最后感谢 http://www.jianshu.com/p/414b8e91e021 作者

相关文章

  • 多线程理解及GCD的同步异步操作

    先说明今天的疑问在做FMDB的本地存储,查询了解到,FMDB在多线程访问数据库,针对线程安全上,使用过了FMDat...

  • 多线程相关面试问题

    多线程:GCD、NSOperation、NSThread。 一、GCD 1、同步/异步 和 串行/并发(1)、同步...

  • 多线程系列文章

    GCD基础篇 - 同步、异步,并发、并行的理解 GCD中级篇 - dispatch_group的理解及使用 dis...

  • iOS面试之多线程模块

    多线程 多线程内容如下: GCD NSOperation NSThread 多线程与锁 1.GCD 同步/异步和串...

  • iOS面试 -- 多线程相关

    多线程技术方案 GCD NSOperation NSThread GCD 同步/异步 和串行/并发 dispatc...

  • 多线程

    GCD NSOperation NSThread 多线程与锁 一、GCD 同步、异步 和 串行、并发 dispat...

  • 多线程

    ios中为我们提供了GCD、NSOpration、NSThread 一、GCD多线程与锁GCD 同步异步、串行、并...

  • 多线程

    iOS中的几种多线程GCD1、GCD分为任务和队列,任务(同步,异步)队列(串行,并发),同步串行,同步主队列的情...

  • iOS gcd看我就够了

    gcd是iOS中多线程的一种技术,下面我们来看看gcd的用法 同步&异步 同步 同步执行:字面意思,同步执行就是执...

  • GCD队列、同步异步

    GCD队列、同步异步 GCD队列、同步异步

网友评论

      本文标题:多线程理解及GCD的同步异步操作

      本文链接:https://www.haomeiwen.com/subject/pojoittx.html