多线程GCD
说道线程,我们就先来说说什么是进程,什么是线程.线程和进程有什么差别
首先,线程是只进程内的一个执行单元,也是进程内可以调度的实体.与进程的区别在于下面的几个方面
1,调度:线程作为调度和分配的基本单位,进程作为拥有资源的基本单位
2,并发性:不仅进程之间可以并发,线程之间也可以并发执行,同一个进程的多个线程之间也可以并发执行
3,用有资源:进程是用有资源的一个独立单位,线程不拥有系统资源,但可以访问隶属于进程的资源
4,系统开销:在创建或者撤销进程时,由于系统都要为之分配和回收资源,导致系统开销明显大于创建或者撤销线程时的开销
可以总结为: 进程就是饭店的老板,老板提供饭店的房子,桌子,椅子,饭菜等,拥有这个饭店
进程就是饭店的服务员,当客人来了,负责分配饭店里的资源,比如顾客坐在什么位置,厨师要做什么菜
多线程有好几种形式
1.NSThread
2.GCD
一般都是是用异步执行,同步执行还是会造成系统拥挤
延时多少后执行,是可以定时的
首先,声明一个队列
dispatch_queue_t custom = dispatch_queue_create("jelly", DISPATCH_QUEUE_CONCURRENT);
其中第一个参数是标志队列的,第二个参数是用来定义队列的参数(目前不支持,因此一般传入NULL)
接下来执行一个队列
dispatch_async(custom, ^{
[blockSelf banzhuan];
});
其中,首先传入的是之前创建的队列,然后是运行的代码块
如果要暂停一个队列,可以调用如下代码.暂停一个队列会阻止和该队列相关的所有的代码运行
dispatch_suspend(myQueue);
如果暂停一个队列不要忘记恢复.暂停和恢复操作和内存管理中的retain和release相似.调用dispatch_suspend(myQueue)会增加暂停计数,而dispatch_resume(myQueue)会减少.队列会在暂停计数成零的情况下才会运行
恢复一个队列
dispatch_resume(myQueue)
应该注意dispatch_resume(myQueue) dispatch_suspend(myQueue)在主线程运行代码
使用GCD,可以让你的程序不会失去响应,多线程不容易使用,用了GCD,会让它变的简单,你无须专门进行线程的管理