进程
-
进程是指一个系统中正在运行的一个应用程序.
-
每个进程之间是独立的且均运行在其专用并受保护的内存空间内.
线程
线程是进程的基本执行单元,一个进程想要执行任务,必须得有线程(每一个进程必须至少有一个线程)
主线程
一个iOS程序运行后,默认会开启一条线程,该线程称为"主线程"或"UI线程".
主线程的作用
-
显示/刷新UI界面
-
处理UI事件(比如点击事件,滚动事件,拖拽事件等)
主线程的使用注意
不要将耗时的操作放置在主线程中,耗时操作会卡住主线程严重影响UI的流畅度,会给用户一种"卡"的感觉,体验效果不就好.
线程的串行
如果要在一个线程中执行多个任务,那么只能一个一个的按顺序执行这些任务,也就是说:在同一个时间内,一个线程中只能执行一个任务.
多线程
一个进程中可以开启多个线程,每个线程可以并行执行不同的任务.(多线程技术可以提高程序的执行效率)
多线程的原理
如果单核CPU(多核CPU的话那就是真*多线程)
-
同一时间,CPU只能处理一条线程,只有一条线程在工作
-
多线程并发执行时,其实是快速的在线程之间调度
-
如果CPU调度线程的时间足够快,就会造成多条线程并发执行的假象
如果有很多很多线程
CPU会在多个线程之间调度,最终会导致 CPU累死,消耗大量的CPU资源,并且每条线程被调用执行的频率降低,导致线程的执行效率降低
多线程的优点
-
能够适当的提高程序的执行效率
-
能够适当提高资源的利用率(CPU,内存的利用率)
多线程的缺点
-
开启线程需要占用一定的内存空间(iOS中默认情况下,主线程占用1 M,子线程占用512KB),如果开启大量的线程,会占用大量的内存空间,降低程序的性能
-
线程越多,CPU在调度线程的开销就越大
-
程序设计的更加复杂:比如线程之间的通讯,多线程的数据共享问题
线程的通讯
在一个进程中,线程往往不是鼓励存在的,多个线程之间是存在于通信关系的
线程通信的体现
-
一个线程传递数据给另外一个线程
-
一个线程执行完任务后转到另外一个线程继续执行任务