iOS多线程.md
2019-06-29 本文已影响0人
_coCo__
2018-05-22
iOS多线程-概念
iOS多线程:『pthread、NSThread』详尽总结
线程概述
- 有些程序是一条直线,起点到终点;有些程序是一个圆,不断循环,直到将它切断。一个运行着的程序就是一个进程或者叫做一个任务,一个进程至少包含一个线程,线程就是程序的执行流。
- Mac和iOS中的程序启动,创建好一个进程的同时, 一个线程便开始运行,这个线程叫主线程。主线程在程序中的地位和其他线程不同,它是其他线程最终的父线程,且所有界面的显示操作即AppKit或 UIKit的操作必须在主线程进行。
- 系统中的每一个进程都有自己独立的虚拟内存空间,而同一个进程中的多个线程则共用进程的内存空间。每创建一个新的线程,都需要一些内存(如每个线程有自己的Stack空间)和消耗一定的CPU时间。另外当多个线程对同一个资源出现争夺的时候需要注意线程安全问题
- 多线程的实现原理:虽然在同一时刻,CPU只能处理1条线程,但是CPU可以快速地在多条线程之间调度(切换),造成了多线程并发执行的假象。
多线程优点
能适当提高程序的执行效率。
能适当提高资源利用率(CPU、内存利用率)
多线程的缺点
创建线程是需要成本的:iOS下主要成本包括:在栈空间的子线程512KB、主线程1MB,创建线程大约需要90毫秒的创建时间。
线程越多,CPU在调度线程上的开销就越大。
线程越多,程序设计就越复杂:因为要考虑到线程之间的通信,多线程的数据共享。
》 计算机操作系统都有的基本概念,以下概念简单方式来描述。
- 进程: 一个具有一定独立功能的程序关于某个数据集合的一次运行活动。可以理解成一个运行中的应用程序。
- 线程: 程序执行流的最小单元,线程是进程中的一个实体。
- 同步: 只能在当前线程按先后顺序依次执行,不开启新线程。
- 异步: 可以在当前线程开启多个新线程执行,可不按顺序执行。
- 队列(Dispatch Queue): 装载线程任务的队形结构。
- 并行队列(Concurrent Dispatch Queue): 线程执行可以同时一起进行执行,不需要上- 一个执行完,就能执行下一个的。
- 串行队列(Serial Dispatch Queue): 线程执行只能依次逐一先后有序的执行,等待上一个执行完,再执行下一个。
注意:
一个进程可有多个线程。
一个进程可有多个队列。
队列可分并发队列和串行队列。
iOS开发中的多线程
iOS的主线程
一个iOS程序运行后,默认会开启1条线程,称为“主线程”或“UI线程”