美文网首页
iOS 线程的一些知识点

iOS 线程的一些知识点

作者: 奴良 | 来源:发表于2018-03-16 11:06 被阅读44次

关于开辟线程的开销

iOS下主要成本包括:内核数据结构(大约1KB)、栈空间(子线程512KB、主线程1MB)

GCD线程死锁

//前提是在主线程中
dispatch_sync(dispatch_get_main_queue(), ^{
    //code
});

死锁的原因如下图:


任务之间的相互等待.png

还有一种情况,就是同样在主线程中,同步调用手动创建的串行队列,是否会引发死锁?为什么? 代码如下:

//前提也是在主线程中
dispatch_queue_t queue = dispatch_queue_create("sync.queue", nil);
dispatch_sync(queue, ^{
    //code
});

那么这种情况是否会产生死锁呢?答案是不会,原因如下图:


不会死锁的原因

关于dispatch_barrier_sync

我们需要注意的地方是第一个参数所需要的队列,必须是手动创建的并行队列,这样dispatch_barrier_sync才会等待处于自己前面的任务执行完毕后,抢占资源执行自己,等自己执行完毕后,队列中的后续任务才能执行。

如果使用dispatch_get_global_queue进行一个并行队列的获取,那么整个队列中的任务会并行执行,dispatch_barrier_sync也不会等待队列中处于自己前面的任务执行完毕,处于它后面的任务也不会等待dispatch_barrier_sync任务执行完毕,整个队列的任务会并行执行。

dispatch_queue_t queue = dispatch_queue_create("sync.queue", DISPATCH_QUEUE_CONCURRENT);
dispatch_barrier_sync(queue, ^{
    //code
});

相关文章

  • OC--各种线程锁

    参考:正确使用多线程同步锁@synchronized()iOS中的锁iOS多线程安全详解iOS 常见知识点(三):...

  • iOS多线程的一些知识点

    讲述一些有关iOS中的多线程知识点,以及一些应用实例 一、多线程基础知识 多线程是一个比较轻量级的方法来实现单个应...

  • iOS 多线程知识相关

    前言 主要是整理下关于iOS中多线程的相关知识点,加强记忆 目前iOS有四种多线程 1.Pthreads2.NST...

  • iOS多线程实现方案之 -- NSThread

    书接上回, 上次谈到iOS 多线程知识点总结之: 进程和线程, 接着就是 多线程实现方案里面的 NSThread...

  • iOS知识点知识树盘点

    iOS基础知识点-进程、线程、多线程[https://www.jianshu.com/p/de83bdd7afb0]

  • iOS 线程的一些知识点

    关于开辟线程的开销 iOS下主要成本包括:内核数据结构(大约1KB)、栈空间(子线程512KB、主线程1MB) G...

  • iOS延时执行测试

    在iOS程序中运行结果的原理 performSelector:@selector(logb)知识点:告诉线程直接调...

  • iOS多线程知识点

    最近整理的iOS多线程方面的知识点,iOS中总共有4种实现多线程的方案,但是pthread是基于C语言并且不太好用...

  • iOS多线程之pthread和NSThread

    iOS开发中,多线程相关的知识点主要包括pthread、NSThread、NSOperation和GCD,我们经常...

  • iOS知识体系总结-多线程

    注意:更新内容会同步到GitHub iOSWiki-知识体系总结 总结-多线程 iOS知识点/操作系统 #iOS...

网友评论

      本文标题:iOS 线程的一些知识点

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