• 多线程


    多线程

    进程

    • 进程是指在系统中正在运行的一个应用程序

    • 每个进程之间是独立的,每个进程均运行在其专用且受保护的内存空间内

    • 通过“活动监视器”可以查看Mac系统中所开启的进程

    线程

    • 1个进程要想执行任务,必须得有线程(每1个进程至少要有1条线程)
    • 1个线程中任务的执行是串行的(执行完上一个才能执行下一个)
    • 因此,也可以认为线程是进程中的1条执行路径
    •  

    多线程

    • 1个进程中可以开启多条线程,多条线程可以并行(同时)执行不同的任务
    • 线程可以并行, 但是每个线程中的任务还是串行
    •  

    多线程原理

    • 多线程并发(同时)执行,其实是CPU快速地在多条线程之间调度(切换)

    多线程优缺点

    • 优点

      • 能适当提高程序的执行效率
      • 能适当提高资源利用率(CPU、内存利用率)
    • 缺点

      • 创建线程是有开销的,iOS下主要成本包括:内核数据结构(大约1KB)、栈空间(子线程512KB、主线程1MB,也可以使用-setStackSize:设置,但必须是4K的倍数,而且最小是16K),创建线程大约需要90毫秒的创建时间
      • 线程越多,CPU在调度线程上的开销就越大
      • 如果开启大量的线程,会降低程序的性能
      • 程序设计更加复杂:比如线程之间的通信、多线程的数据共享

    主线程

    • 什么是主线程

      • 一个iOS程序运行后,默认会开启1条线程,称为“主线程”或“UI线程”
    • 主线程的主要作用

      • 显示刷新UI界面
      • 处理UI事件(比如点击事件、滚动事件、拖拽事件等)
    • 主线程的使用注意

      • 别将比较耗时的操作放到主线程中
      • 耗时操作会卡住主线程,严重影响UI的流畅度,给用户一种“卡”的坏体验 

    • pthread
      • 类型: C语言中类型的结尾通常 _t/Ref,而且不需要使用 *
        /*
        参数:
        1. 线程代号的地址
        2. 线程的属性
        3. 调用函数的指针
          - void *(*)(void *)
          - 返回值 (函数指针)(参数)
          - void * 和 OC 中的 id 是等价的
        4. 传递给该函数的参数
        返回值:
        如果是0,表示正确
        如果是非0,表示错误码
        */
        NSString *str = @"lnj";
        pthread_t thid;
        int res = pthread_create(&thid, NULL, &demo, (__bridge void *)(str));
        if (res == 0) {
          NSLog(@"OK");
        } else {
          NSLog(@"error %d", res);
        }
    本博文由博主根据资料或其他优秀博文整理而成,转载请注明出处,谢谢!
  • 相关阅读:
    系统数据查询耗时优化解决方案
    Mybatis逆向工程
    微服务架构下的分布式数据管理
    分布式或微服务架构中的分布式锁应用
    word 常用宏代码
    office2003?2007共存?版本各自打开的解决方案
    word域3
    2014新版《安全生产法》测试题
    Excel与Word套打功能使用技巧及EXCEL数据处理成绩
    word域2
  • 原文地址:https://www.cnblogs.com/Apolla/p/4737999.html
Copyright © 2020-2023  润新知