美文网首页
利用多线程解决相关的问题

利用多线程解决相关的问题

作者: 森碟儿 | 来源:发表于2019-07-18 16:11 被阅读0次

    1.主线程阻塞,其他任何操作都无法操作

    2.需要快速进行多个任务计算的场景,使用多线程能明显提高单位时间内的计算效率

    常驻线程:

    AFNetworking2.0专门创建了一个线程来接收NSOperationQueue的回调,这个线程其实就是一个常驻线程。

    通过NSRunLoop添加runloop的方法有三个:

    1.run方法:通过run方法添加的runloop,会不断地重复调用runMode:beforeDate:方法。来保证自己不会停止

    2.runUntilDate:和runMode:beforeDate方法,这两个方法添加的runloop可以通过指定时间来停止runloop.

    AFNetworking2.0和AFNetworking3.0的区别:

    AFNetworking2.0使用的是NSURLConnection发请求

    AFNetworking3.0使用的是NSURLSession

    被替换的原因是:避免常驻线程的坑,NSURLConnection不能指定回调NSOperationQueue队列,使得线程一直常驻在内存中,不安全。而NSURLSession请求则可以避免这种情况发生。

    需要保活线程一段时间的方法

    使用NSRunLoop的另外两个方法:

    runUntilDate:

    runMode:beforeDate:

    CFRunLoopRef的CFRunLoopRun和CFRunLoopStop

    可以指定线程的保活时长,让线程存活的时间可预期,总比让线程常驻得好。至少在硬件资源利用率这点更加合理

    并发:

    以使用GCD为例来说明多线程的并发问题

    在进行数据读写操作时,总需要一段时间来等待磁盘响应,如果在这个时候通过GCD发起一个任务,GCD本着最大化利用CPU的原则,会等待磁盘响应的这个空档,再创建一个新线程来保证能够充分利用CPU。常见案例有数据库(FMDB)的读写操作。

    FMDB数据库:通过FMDatabaseQueue这个核心的类,将读写数据库相关的磁盘都放到一个串行队列里执行,从而避免线程创建过多导致系统资源紧张的情况。

    总结:类似数据库这种需要频繁读写磁盘操作的任务,尽量使用串行队列来管理,闭麦你因为多线程并发而出现内存问题

    相关文章

      网友评论

          本文标题:利用多线程解决相关的问题

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