多线程

进程:进程就是指在系统中正在运行的一个应用程序,都是独立的,并且每个进程均运行在其专有且受保护的内存中
线程:一个进程至少有多个进程组成,线程是进程的基本执行单元,进程中的所有任务都要在线程中执行

在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 :自旋锁  (单写多写) 效率低 (轮讯)

 


 

 

 

posted @ 2016-03-06 22:00  朱保锋  阅读(129)  评论(0编辑  收藏  举报