参考:
Objective-C高级编程
1.线程定义
1个CPU执行的CPU命令列为一条无分叉的路径。即为线程。
源码通过编译器转换为cpu命令列(二进制代码)。应用程序启动后,将cpu的命令列配置到内存中。 cpu从应用程序制定的地址开始,一个一个的执行cpu的命令列。
在OC中的if语句或者for语句等控制语句,或者函数调动的情况下,执行命令的地址会远离当前位置(位置迁移),但是cpu一次只能执行一个命令,不会分叉。
2.多线程
无分叉的路径不只1条,存在多条时即为多线程。
一个cpu可以通过上下文切换,并列的执行多个线程。多个cpu也可以并列的执行多个线程。
上下文切换:cpu可以在执行路径上进行切换,执行中路径的状态(如cpu的寄存器信息等)会保存在专用的内存块中。cpu切换后,可以从专用内存块中复原路径信息,继续执行cpu命令列。
3.优点和问题
1.优点:
使用多线程可以保证应用程序的响应性能。
2.问题:
竞态条件(Race Condition)。指两个或两个以上线程对共享的数据进行读写操作时,最终的数据结果不确定的情况。
死锁 指两个或两个以上的线程或者任务,它们之间互相等待彼此停止执行。
优先倒置(Priority Inverstion)。指低优先级的任务会因为各种原因先于高优先级任务执行。
内存销毁过大 使用太多线程会消耗大量内存。