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

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

作者: 森碟儿 | 来源:发表于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这个核心的类,将读写数据库相关的磁盘都放到一个串行队列里执行,从而避免线程创建过多导致系统资源紧张的情况。

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

相关文章

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

    1.主线程阻塞,其他任何操作都无法操作 2.需要快速进行多个任务计算的场景,使用多线程能明显提高单位时间内的计算效...

  • Java基础(多线程)

    多线程概述 多线程是Java的特点之一, 掌握多线程编程技术, 可以充分利用CPU的资源,更容易解决实际中的问题,...

  • swift中的"互斥锁"

    前言 脱产学习swift中, 从多线程开始, 遇到了类似于oc中的多线程资源抢夺问题..oc中的解决方案是利用 "...

  • 并发容器之ThreadLocal原理(转)

    1. ThreadLocal的简介 在多线程编程中通常解决线程安全的问题我们会利用synchronzed或者loc...

  • python文件分割,列表分割

    问题描述 python分割文件或列表作为多线程,多进程输入 解决方案 文件分割(利用pandas) path为文件...

  • 多线程利用本地缓存处理相关问题

    最近看了一些关于多线程的介绍,让我感受最深的是有关多线程异步和同步共同使用已达到优化代码的目的,很值得去学习这种思...

  • 第二章、UI视图相关

    一、UITableView相关的数据源同步问题,即如何在tableview解决多线程情况下,数据的处理? 1、并行...

  • 多线程相关问题

    为什么不执行test方法 ?performSelector :withObject:afterDelay: 本质是...

  • Java Web技术经验总结(十二)

    今天解决多线程问题的时候,用到了优先级队列模型,涉及到“按照优先级”从高到低遍历,因此查到这个问题:如何利用Jav...

  • 谈谈对于多线程的理解

    针对这个问题可以从以下几个点来说。 多线程用来解决什么问题 java怎么实现多线程 使用多线程会带来哪些问题 怎么...

网友评论

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

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