-
进程和线程
一个运行的系统就是一个进程。
线程是一个程序的执行流。
一个进程至少包含一个线程,当程序启动时,在创建一个进程的同时,也会开始运行一个线程,这个线程被称为主线程。
主线程是其他线程最终的父线程,所有界面的操作必须是在主线程执行。后台线程是无法更新UI
界面和响应用户点击事件的。
总结进程和线程:
线程是CPU
调用的最小单位;
进程是CPU
分配资源的最小单位;
一个进程中至少要有一个线程;
同一个进程内的线程共享进程的资源;
-
多线程原理
同一时间,
CPU
只能处理一条线程,多线程并发执行,实际是CPU
快速在多条线程之间调度
每新建一个线程,都会消耗一定的内存和CPU
资源,当线程非常多时,CPU
会在N条多线程之间调度,那么就会消耗大量的CPU
资源,同时每条线程被调度执行的频次也会降低,即线程的执行效率会降低。因此一般只开3~5条线程。
-
并发、串行、并行、同步、异步
并发:当有多个线程在操作时,如果系统只有一个CPU
,则它根本不可能真正同时进行一个以上的线程,它只能把CPU
运行时间划分为若干个时间段,再将时间段分配给各个线程执行,在一个时间段的线程代码运行时,其它线程处于挂起状。
串行:一个线程中任务的执行是串行的,如果一个线程中执行多个任务,那么只能一个一个按顺序执行,即同一时间内,一个线程只能执行一个任务。
并行:多个程序同一时刻在不同的CPU
上同时执行。当系统有一个以上CPU
时,则线程的操作有可能非并发。当一个CPU
执行一个线程时,另一个CPU
可以执行另一个线程,两个线程互不抢占资源,可以同时进行。
同步:不会开启新的线程,任务按顺序执行。
异步:会开启新的线程,任务之间彼此独立,可以在等待某事件的过程中去执行自己的事。
总结并发和并行:
并发运行:两个或多个事件在同一时间间隔内发生,总线程数 >CPU
数量
并行运行:两个或多个时间在同一时刻发生,总线程数 <=CPU
数量
-
多线程应用
多线程长应用于耗时操作,比如:网络图片、视频、歌曲、书籍等资源的下载。
-
多线程可能会导致的问题
- 多个线程处理相同资源会导致数据不一致(即数据竞争)
- 停止等待事件的线程会导致多个线程相互持续等待(死锁)
- 使用太多线程会消耗大量内存
……
-
多线程的实现方案
多线程之GCD
多线程之NSThread
多线程之NSOperation