进程:进程就是指在系统中正在运行的一个应用程序,都是独立的,并且每个进程均运行在其专有且受保护的内存中线程:一个进程至少有多个进程组成,线程是进程的基本执行单元,进程中的所有任务都要在线程中执行在OC中,一般要是有同步或者异步的问题,都要去葱多线程的角度去考虑同步:单个进程执行多个人物,只能是依次执行异步:多个进程同时执行多个任务多线程优点:1.多线程可以解决程序组赛问题2.可以提高程序的执行效率3.提高cpu和内存的利用率4.线程执行完任务后会自动销毁缺点:1.多线程开辟会开辟一段空间,如果线程多的话,会降低程序的性能2.线程越多,cpu调用线程的开销就会越大3.线程较多,造成程序复杂化(线程间的通信,线程间的资源共享)主线程:一个程序开启后,会默认开启一个主线程或UI线程 ,主线程一般处理UI刷新和UI事件,咱们一般不要把耗时操作放在主线程里面,这样会卡住主线程,严重影响UI的流畅度,"卡"的感觉所谓的多线程就是cpu在多个线程间迅速的切换,造成了一种多个任务同时执行的假象,一般有耗时操作时都会把这个操作去放在子线程上去完成,主线程一般只用来解决UI的更新,以及相应时间 线程的5中状态: 创建 就绪 运行 阻塞 死亡 是一个环
NSTread 在平时的开发中不常使用,一般用来作为工具类方法,进行测试创建方式:1. NSThread *thread = [[NSThread alloc]initWithTarget:self selector:@selector(demo) object:nil]; [thread start];2.[NSThread detachNewThreadSelector:@selector(demo) toTarget:self withObject:nil];3.[self performSelectorInBackground:@selector(demo) withObject:nil];常用属性://设置线程的优先级 0 - 1值越大优先级越高,值越小优先级越低,默认为0.5 [thread setThreadPriority:1.0];//设置线程名称 用于调试 thread2.name = @"test";// 当前线程 [NSThread currentThread] //获取当前线程占用的内存大小 NSLog(@"touchesBegan %zd",[NSThread currentThread].stackSize/1024);
// 线程阻塞状态
[NSThread sleepForTimeInterval:1.0];
// 线程死亡
[NSThread exit];
多个线程共享同一个资源时,会造成线程不安全解决方式 互斥锁 主要是防止多线程抢资源造成的数据不安全 原理 :每一个对象(NSObject)内部都有一个锁(变量)当有线程要进入synchronized到代码块的时候先检查对象的锁是打开或者是关闭默认是打开,当线程会进入代码的内部,进行上锁 如果锁是是关闭的,再有线程执行代码的时候就要先等待,直到上个线程结束后就先等待,直到直到锁打开就才可以执行
@synchronized(self) {// 需要锁定的代码} 注意self要是全局对象
atomic :自旋锁 (单写多写) 效率低 (轮讯)