**这是我参与「第四届青训营 」笔记创作活动的的第10天**
今天是8月1日,今天进行了Objective-C 多线程编程与GCD的课程学习,在课后整理了相关的笔记。
多线程
多线程编程又称为并发编程,让多个CPU并发处理多个线程的指令,从而提高程序的执行效率
进程:程序运行的实例,是资源分配的最小单位,独立地运行在其专用受保护的内存空间内
线程:一个进程可以包含多个线程,线程是操作系统实施调度的最小单位
每个线程之间共享同一进程的内存空间(进程的代码段、数据段、堆等)及一些进程的资源(如打开文件等),在每个线程中有独立的寄存器、栈、线程局部存储(TLS)等私有数据
串行:任务有序地一个一个地执行,在前一个任务执行完之后才执行下一个任务
并行:多个任务在同一时刻被执行
并发:多个任务在同一时间段内需要被执行
线程的生命周期:包括新建、就绪、运行、阻塞、死亡五种状态
线程调度:不断地在处理器上切换不同线程(线程执行的一小段时间为时间片)的行为
RunLoop :事件接收和分发机制的一个实现,可以让线程在适当的时间处理任务不会退出(保持程序的运行)。
RunLoop的作用:保持程序持续运行、处理程序中的各种事件、节省 CPU 资源提高程序性能,在必要的时候线程会被唤醒进行工作,否则会进入休眠,休眠时不占用 CPU。
主线程(UI线程): iOS App启动时默认会开启一条线程,称为“主线程”,主线程默认开启 RunLoop
多线程的优点:能适当地提高程序的执行效率和资源的利用率
多线程的缺点:创建线程、线程调度都是有开销成本的,如果开启大量线程,会降低程序的性能。多线程需要谨慎处理线程安全问题,增加了程序设计的复杂度
GCD
GCD(Grand Central Dispatch):Apple 提供的异步执行任务的技术之一,抽象出了任务、队列 等概念,将并发编程的范式变为了定义想执行的任务并追加到适当的派发队列
优点:自动使用更多CPU 内核,自动管理线程的生命周期,提供了易于使用的并发模型,编码更加简洁,无需多余的线程管理任务
任务:在线程中执行的代码,在 GCD API中以 block 的形式提交到队列
队列:任务派发队列(先进先出),任务追加到派发队列后按照先进先出的次序派发到对应线程进行处理
串行队列:队列中的任务在单个线程中顺序执行,执行中的任务结束后才能继续执行下一个任务
并行队列:队列中的任务在异步执行的情况下可以分发到多个线程下同时执行,无须等待上一个任务执行完
获取队列:
创建自定义队列:dispatch_queue_t queue=dispatch_queue_create( ,DISPATCH_QUEUE_SERIAL);//串行
dispatch_queue_t queue=dispatch_queue_create( ,DISPATCH_QUEUE_CONCURRENT);//并行
创建主队列:dispatch_queue_t mainqueue=dispatch_get_main_queue();
创建并行队列: dispatch_queue_t queue=dispatch_get_global_queue(,0);
总结
今天了解了OC的多线程和GCD,了解到GCD的创建,及任务和队列,不同队列的区别和用法。