美文网首页
ios多线程开发理解(1)

ios多线程开发理解(1)

作者: 进击的小杰 | 来源:发表于2016-05-31 19:42 被阅读78次

    在讲多线程编程之前先简单概括下几个概念。(这里就不细讲线程和进程的差别了,同学们可以自行百度):

    概念一:

    队列:是管理线程的,相当于线程池,能管理线程什么时候执行。
    队列分为串行队列和并行队列等
    串行队列:队列中的线程按顺序执行(不会同时执行)
    并行队列:队列中的线程会并发执行。可能会有一个疑问,队列不是先进先出吗,如果后面的任务执行完了,怎么出去的。这里需要强调下,任务执行完毕了,不一定出队列。只有当前面的任务执行完了才会出队列。

    同步与异步

    同步是指:发送方发出数据后,等接收方发回响应以后才发下一个数据包的通讯方式。使用者通过单个线程调用服务;该线程发送请求,在服务运行时阻塞,并且等待响应。

    异步是指:发送方发出数据后,不等接收方发回响应,接着发送下个数据包的通讯方式。使用者通过两个线程调用服务;一个线程发送请求,而另一个单独的线程接收响应。

    在网络数据交互中:
    1.同步请求可以从因特网请求数据,一旦发送同步请求,程序将停止用户交互,直至服务器返回数据完成,才可以进行下一步操作。
    2、异步请求不会阻塞主线程,而会建立一个新的线程来操作,用户发出异步请求后,依然可以对UI进行操作,程序可以继续运行

    队列:是管理线程的,相当于线程池,能管理线程什么时候执行。
    队列分为串行队列和并行队列等
    串行队列:队列中的线程按顺序执行(不会同时执行)
    并行队列:队列中的线程会并发执行,可能会有一个疑问,队列不是先进先出吗,如果后面的任务执行完了,怎么出去的了。这里需要强调下,任务执行完毕了,不一定出队列。只有前面的任务

    串行队列同步:操作不会新建线程、操作顺序执行
    串行队列异步:操作需要一个子线程,会新建线程、线程的创建和回收不需要程序员参与,操作顺序执行,“最安全的选择”
    并行队列同步:操作不会新建线程、操作顺序执行
    并行队列异步:操作会新建多个线程(有多少任务,就开n个线程执行)、操作无序执行;队列前如果有其他任务,会等待前面的任务完成之后再执行;场景:既不影响主线程,又不需要顺序执行的操作
    全局队列异步:操作会新建多个线程、操作无序执行,队列前如果有其他任务,会等待前面的任务完成之后再执行
    全局队列同步:操作不会新建线程、操作顺序执行
    主队列异步:操作都应该在主线程上顺序执行的,不存在

    1:首先简单介绍什么叫线程

    可并发执行的,拥有最小系统资源,共享进程资源的基本调度单位。
    共用堆,自有栈(官方资料说明iOS主线程栈大小为1M,其它线程为512K)。
    并发执行进度不可控,对非原子操作易造成状态不一致,加锁控制又有死锁的风险。

    2:IOS中的线程

    iOS主线程(UI线程),我们的大部分业务逻辑代码运行于主线程中。
    没有特殊需求,不应引入线程增加程序复杂度。
    应用场景:逻辑执行时间过长,严重影响交互体验(界面卡死)等。

    如果有人问ios中多线程有几种,应该很多人会说三种。其实应该有四种,还有一种pthread。

    下面先让我们来看下各个线程相互直接的区别和一些使用场景。



    从上图可以看出我们在ios开发中一般使用到的线程主要有三种,分别是:
    (一)NSThread
    (二)Cocoa NSOperation
    (三)GCD(全称:Grand Central Dispatch)
    所以pthread在这里就不详细介绍,笔者其实也没有用过。

    相关文章

      网友评论

          本文标题:ios多线程开发理解(1)

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