多线程基础知识
1,线程和进程的区别
进程:是系统对资源进行分配和调度的最小单位,主要管理资源
线程:是进程的基本执行单元,一个进程包含有多个线程,其中有一条主线程(主要用来处理UI,更新UI的操作都必须在主线程中完成,不要把耗时操作放在主线程中,否则会卡住界面)
多核概念:核(CPU)一个CPU只能处理一个线程,但CPU可以在多条线程之间快速切换。
2,什么是多线程
多线程:我们平常的开发中完全可以不用到多线程,使用多线程的目的是为了app的性能优化,使用多线程可以将任务分分批执行,通过提高资源使用率来提高系统总体的效率。
3,多线程的实现方式有哪几种
①pthread
②NSthread :需要我们手动管理,NSThread比其他两种多线程方案较轻量级,更直观地控制线程对象
创建:NSThread *thread1 = [NSThread alloc] initWithTarget:执行方法的对象selector:新线程绑定的方法 object:方法中的参数
[thread1 start];//开启线程
[thread1 cancel];//将来某个时间结束
[NSThread exit];//立即结束
阻塞休眠:
[NSThread sleepForTimeInterval:2];
[NSThread sleepUntilDate:[NSDate date]];//比如设置启动页时间
③GCD
同步:同步就是顺序执行,执行完一个再执行下一个,需要等待、协调运行。
异步:在等待某事件的过程中继续做自己的事,不需要等待这一事件完成后再工作。
串行并行,针对cpu来讲,单核并发未加并发,多核并发才是真的并发
④NSOperation:NSOperation是基于GCD之上的更高一层封装,需要创建一个操作队列,并用NSBlockOperation创建操作添加到操作队列,队列会自动开辟子线程来执行任务。
创建quene: NSOperationQueue *queue = [[NSOperationQueue alloc] init];//默认并发
可通过改变并发数来实现串行还是并发:queue.maxConcurrentOperationCount = 1; //并发数为1时该操作队列为串行
添加到操作队列:[queue addOperationWithBlock:^{
}];