多线程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,会让它变的简单,你无须专门进行线程的管理

 

 

 

 

 
posted @ 2015-03-23 20:02  NSJELLY  阅读(223)  评论(0编辑  收藏  举报