一.同步和异步
同步和异步是任务执行的两种方式
1.什么是同步
我们之前写程序的时候都是从上到下,代码顺序执行的
1个人执行多个任务,也是要依次执行,因为1个人同一时间只能执行1个任务
多个任务按序依次执行,就是同步执行
1)同步的概念:必须等待当前语句执行完毕,才可以执行下一个语句
2.什么是异步
多个人同时执行多个任务
二.进程和线程
1.什么是进程
进程是指在系统中正在运行的一个应用程序
每个进程之间是独立的,每个进程均运行在其专用的且受保护的内存空间内
比如同时运行QQ 和 Xcode,系统会分别启动两个进程
通过“活动监视器”可以查看Mac系统中所开启的进程
2.什么是线程
1个进程可以有多个线程组成(1个进程至少要有1个线程)
线程是进程的基本执行单元,一个进程的所有任务都在线程中执行
比如听音乐,发送QQ消息,接收QQ消息都要在线程中执行
三.多线程
1.什么是多线程
多线程 : 1个进程中可以开启多个线程,多个线程可以“同时”执行不同的任务
进程-公司,线程-员工,老板是什么?
多线程可以解决程序阻塞的问题
多线程可以提高程序的执行效率
2.多线程的执行原理
a. (单核CPU)同一时间,cpu只能处理1个线程,只有1个线程在执行任务
b. 多线程同时执行:是CPU快速的在多个线程之间的切换
c. cpu调度线程的时间足够快,就造成了多线程的”同时”执行的假象
d. 如果线程数非常多,cpu会在n个线程之间切换,消耗大量的cpu资源
i. 每个线程被调度的次数会降低,线程的执行效率降低
3.多线程的优缺点
多线程的优点
能适当提高程序的执行效率
能适当提高资源的利用率(cpu,内存)
线程上的任务执行完成后,线程会自动销毁
多线程缺点
开启线程需要占用一定的内存空间(默认情况下,每一个线程都占512KB)
如果开启大量的线程,会占用大量的内存空间,降低程序的性能
线程越多,cpu在调用线程上的开销就越大
程序设计更加复杂,比如多线程的数据共享、线程间的通信
4.主线程
一个程序运行后,默认会开启1个线程,称为“主线程”或“UI线程”
主线程一般用来 刷新UI界面 ,处理UI事件(比如:点击、滚动、拖拽等事件)
主线程使用注意
注意:**别将耗时的操作放到主线程中**
耗时操作会卡住主线程,严重影响UI的流畅度,给用户一种卡的坏体验
5.总结
实际上,使用多线程,由于会开线程,必然就会消耗性能,但是却可以提高用户体验。所以,综合考虑,在保证良好的用户体验的前提下,可以适当地开线程,一般开3-6条。
但是需要注意的是:实际上,无论是主线程还是子线程,默认的堆栈大小都是512KB。
官方文档没有及时更新。