软件设计 2017-04-18
进程可以理解为一个应用程序;比如说打开 QQ,那么在内存中就会为 QQ 分配一块进程;打开微信,那么在内存中就会为 微信 分配一块进程;并且进程之间是相互独立的
线程是进程的基本单元(可以理解为一个进程中的各个操作);比如说 QQ,其中的很多操作,比如说发送文件,下载图片等,这些都是子线程
例如 xcode 进程中的线程
一个进程最少有一个线程,称为主线程
进程的各个操作都是在主线程或子线程中完成的
串行和并行都是针对线程而言的
串行 串行是指一个线程中的任务一个一个执行,即上一个任务执行完,下一个任务才能继续;即在同一时间内,只能执行一个任务
如图
可以看出,串行的耗时是所有任务的总和
并行 并行是指一个线程中的任务可以同时进行;即在同一时间内可以进行多个任务
如图
因为每个进程最少都一个线程(主线程),在主线程中还可以创建多个子线程,并且主线程和子线程中的任务是互不干涉的;
也就是说,在同一时间内,可以同时进行主线程和子线程中的任务
如图
系统会为每一个线程指定一个确定的执行时间,当然这个时间很短,然后在各个线程之间做切换(调度),以此来达到多线程
如图
可以看出,单核操作系统的多线程实际上还是串行的,只不过在时间很短的情况下进行线程之间的切换,所以看起来就好像是多线程了
b. 多核操作系统 在多核操作系统上,在同一时间内可以运行多个任务,所以很容易实现多线程,并且是真正的多线程
如图
iOS 应用在启动后,只会开启一条线程(主线程,也称 UI 线程)
通常,在 主线程 中做一些不耗时的工作;例如 刷新 UI 界面、监控事件等