美文网首页
多线程概述

多线程概述

作者: CoderJackieYip | 来源:发表于2016-03-17 21:15 被阅读24次

    主线程的作用:

    1. 显示\刷新UI界面
    2. 处理UI界面(比如点击事件、滚动事件、拖曳事件等)

    优缺点:

    1. 优点:
    • 能适当提高程序的执行效率
    • 能适当提高资源利用率(CPU、内存利用率)
    1. 缺点:
    • 创建线程需要开销,iOS下主要成本包括:
    • 内核数据结构(大约1KB)、栈空间(子线程512KB、主线程1MB、也可以使用-setStackSize:设置,但必须是4K的倍数,而且最小是16K),创建线程大约需要90毫秒的创建时间
    • 如果开启大量线程,会降低程序性能(iOS移动端,2-3条线程适宜)
    • 线程越多,CPU在调度线程上的开销就越大
    • 程序设计更复杂:比如线程之间的通信、多线程的数据共享

    实现方案

    技术方案 简介 语言 线程生命周期 使用频率
    pthread 1. 一套通用的多线程API
    2. 适用于Unix\Linux\Windows等系统
    3. 跨平台\可移植
    4. 使用难度最大
    C 程序员管理 几乎不用
    NSTread 1. 使用更加面向对象
    2. 简单易用,可直接操作线程对象
    OC 程序员管理 偶尔使用
    GCD 1. 旨在替代NSTread等线程技术
    2. 充分利用设备的多核
    C 自动管理 经常使用
    NSOperation 1. 基于GCD(底层是GCD)
    2. 比GCD多了一些更简单实用的功能
    3. 使用更加面向对象
    OC 自动管理 经常使用

    线程的状态

    线程状态

    线程只有在可调度线程池中,才可以被执行,未销毁且不在可调度线程池中的线程,意味该线程处于“阻塞”状态;销毁了的线程也将在可调度线程池中消失

    线程安全

    线程安全分析
    线程安全解决方案:互斥锁

    互斥锁:使用的是线程同步技术
    线程同步:多条线程在同一条线程上执行(按顺序执行任务)

    @synchronized(锁对象) {//需要锁定的代码}```
    移动端尽量使用nonatomic(非原子属性,非线程安全),尽量将加锁、资源抢夺的业务逻辑交给服务器端的护理,减少移动端的压力
    
    ###线程之间通信的一种比较古老经典且复杂的方法:通过NSPort对象进行访问
    每个线程都有一个RunLoop,每个RunLoop都有Port对象(NSMessagePort\NSMachPort\...),线程A想访问线程B,B会返回一个Port(NSMachPort)对象让A拥有,A将通过这个Port去访问B
    ![线程间通过NSPort对象进行访问](https://img.haomeiwen.com/i1366387/d2605e5ac98a846c.jpeg?imageMogr2/auto-orient/strip%7CimageView2/2/w/1240)

    相关文章

      网友评论

          本文标题:多线程概述

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