IOS开发多线程讲解(二)

作者 : 开心源码 本文共2252个字,预计阅读时间需要6分钟 发布时间: 2022-05-12 共181人阅读

小编专题欢迎加入

大家五一快乐,劳动节,让我们劳动一下!上文提及多线程的引入,以及多线程的dispatch_async(dispatch_get_main_queue,^{});的使用,今天我们继续进入多线程的学习

一.dispatch_queue_create
  • 通过dispatch_queue_create函数可以生成Dispatch Queue
dispatch_queue_t mySerialDispatchQueue = dispatch_queue_create("com.example.gcd.MySerialDispatchQueue",NULL);

解析:在讲解dispatch_queue_create之前,我们可以观察到MySerialDispatchQueue中的Serial Dispatch Queue和上一节讲解的内容是一样的(https://www.songma.com/p/b1e6be5cd2fe),通过上一回内容,我们可以理解到Serial Dispatch Queue and Concurrent Dispatch Queue的使用

– Serial Dispatch Queue

执行一个线程任务,当一个线程任务结束后,便可以执行下一个任务

– Concurrent Dispatch Queue

执行多个线程任务,在执行A的同时,可以申请执行B的任务,以此循环往复,知道所有任务一律被执行

尽管我们发现Serial Dispatch Queue and Concurrent Dispatch Queue 都受到了系统资源的限制,但是使用dispatch_queue_create可以生成多个Serial Dispatch Queue,同时让每个Serial Dispatch Queue并行执行图1–多个Serial Dispatch Queue
[使用dispatch_create创立4个Serial Dispatch Queue线程,尽管每一个Serial Dispatch Queue执行一个线程,但是这4个Serial Dispatch Queue属于并发执行]

尽管,可以使用这样的方式来创立多个线程,但是这无疑会添加内存的巨大消耗,从而引起大量的 上下文切换,导致大幅度降低系统的响应性能

有时候使用Serial Dispatch Queue是为了防止多个线程升级相同资源而导致数据竞争使用Serial Dispatch Queuea图2–数据竞争

处理使用Serial Dispatch Queue图3–Serial Dispatch Queue

当想要执行并发同时不发生数据竞争等问题时候,我们也可以使用Concurrent Dispatch Queue,对于Concurrent Dispatch Queue来说不管生成多少个,因为XNU内核只使用有效管理的线程,因而不会发生Serial Dispatch Queue的问题

好啦,回到最初的分析问题上来,对于dispatch_queue_create的解析

dispatch_queue_t mySerialDispatchQueue = dispatch_queue_create("com.example.gcd.MySerialDispatchQueue",NULL);

dispatch_queue_create接收的第一个参数是使用应用程序ID逆序全名程域名

  • 当dispatch_queue_create想要生成Serial Dispatch Queue时候,第二个参数使用NULL
  • 当dispatch_queue_create想要生成Concurrent Dispatch Queue时候,第二个参数使用DISPATCH_QUEUE_CONCURRENT
dispatch_queue_t myConcurrentDispatchQueue = dispatch_queue_create("com.example.gcd.MySerialDispatchQueue",DISPATCH_QUEUE_CONCURRENT);

dispatch_queue_create的返回值类型为dispat_queue_t类型

dispatch_queue_t myConcurrentDispatchQueue = dispatch_queue_create("com.example.gcd.MySerialDispatchQueue",DISPATCH_QUEUE_CONCURRENT);dispatch_queue_async(myConcurrentDispatchQueue,^{      NSLog(@"This my Concurrent Dispatch Queue");});

尽管,在Xcode中我们有ARC自动释放内存,但是对于我们自己创立的线程需要自己来释放

dispatch_release(myConcurrentDispatchQueue);   dispatch_release(mySerialDispatchQueue);   
总结:本文讲述了dispatch_queue_create的使用方法,需要注意的是其中的返回值为dispatch_queue_t,同时,程序员需要自己释放自己生成的线程,同时,注意生成Serial Dispatch Queue and Concurrent Dispatch Queue的方法.下文,我们将讲述关于常用的线程的其它使用方法,其次,五一过后,我们继续进入视图控件的学习–以及对于小编自己写的一个DEMO进行讲解。

说明
1. 本站所有资源来源于用户上传和网络,如有侵权请邮件联系站长!
2. 分享目的仅供大家学习和交流,您必须在下载后24小时内删除!
3. 不得使用于非法商业用途,不得违反国家法律。否则后果自负!
4. 本站提供的源码、模板、插件等等其他资源,都不包含技术服务请大家谅解!
5. 如有链接无法下载、失效或广告,请联系管理员处理!
6. 本站资源售价只是摆设,本站源码仅提供给会员学习使用!
7. 如遇到加密压缩包,请使用360解压,如遇到无法解压的请联系管理员
开心源码网 » IOS开发多线程讲解(二)

发表回复