GCD学习笔记

关于进程和线程

虽然没有学操作系统,但是简单得了解了一下。

先看看进程和线程吧

粗粗的解释:
进程是系统中正在运行的一个程序,程序一旦运行就是进程。
稍微细一点:
进程可以看成程序执行的一个实例。进程是系统资源分配的独立实体,每个进程都拥有独立的地址空间。一个进程无法访问另一个进程的变量和数据结构,如果想让一个进程访问另一个进程的资源,需要使用进程间通信,比如管道,文件,套接字等。
线程是cpu调度和分派的基本单位,进程和线程都是一个cpu工作时间段的描述,线程可与同属一个进程的其他线程共享进程所拥有的全部资源。进程是程序的一次执行过程,它包括加载程序的上下文,执行这个程序,保存这个程序的上下文三部分。进程就是这三个部分的总和,这三部分是执行一个程序的一次资源分配,所以进程是操作系统资源分配的基本单位。
而线程就是更细的cpu执行时间段。

一个cpu核一次执行一个进程(单核cpu一次执行一个进程),cpu核数少于进程数的时候,进程将轮流执行(多核同时执行)。执行一个进程有一些基本信息存储在寄存器之中,cup在不同进程间调动的时候,上一个进程需要将基本信息存储以备下次使用。同时下一个进程在执行时会将之前执行的信息加载,这些信息叫做程序的上下文

关于cpu核数与线程的执行

为什么是一个cpu核一次执行一个进程。那么对于多核来说呢是否为多个进程执行呢
事实上一个cpu核一次执行的是一个线程,进程是线程的集合,执行的线程属于进程,所以一个cpu核一次执行一个进程。所以:
1,多核CPU同时可以执行多个线程,有几个核就能执行几个线程。2,这些线程分属不同进程的话就是执行了多个进程。3,这些线程分属同一个进程的话就是只执行了一个进程的不同线程。4,多核CPU和多个CPU运行机制相同也不同。
cpu如何执行线程:
一个cpu核的运行时间被分成好几段,再将不同时间段分给线程,当时间分的非常小时,宏观上可以看作同一时间执行了多个线程,叫做”并发“,多个cpu核可以实现的“并行”。并行是同一时间段执行了多个线程。
摘抄一个例子:
你吃饭吃到一半,电话来了,你一直到吃完了以后才去接,这就说明你不支持并发也不支持并行。

你吃饭吃到一半,电话来了,你停了下来接了电话,接完后继续吃饭,这说明你支持并发。 (不一定是同时的)

你吃饭吃到一半,电话来了,你一边打电话一边吃饭,这说明你支持并行。

开始GCD吧

GCD是苹果的一种异步执行任务的技术。
我们(开发者)只需要定义想执行的任务并追加到适当的GCD队列(Dispatch Queue)里,GCD就能生成必要的线程并计划执行任务。(也就是说调用就完事了跟接口一,不用管它)。它用了我们难以置信的非常简洁的记述方法,实现了极为繁琐的多线程编程,这是一项划时代的记述(摘自OC高级编程)。
Dispatch queue,是执行处理的等待队列,他是一个队列有先进先出的原则。我们将想要执行的处理追加到队列当中。
队列有俩种,一种是串行队列,一种是并发队列
Serial Dispatch Queue, 会等待现在执行中处理结束
Concurrent Dispatch Queue 不等待现在执行中处理结束
串行队列的理解:
即普通队列,一个一个任务执行。
并发队列:
假如我们有3个线程来执行这个队列,假如队列中有1到5个任务,执行任务那么1、2、3在三个线程里执行(依次加到3个线程里),1执行的较快,当轮到4时,1已经执行完了,那么4加到第一个的线程中。轮到5时,2任务很慢,而3任务已经执行完了,那么5就添加到第3个线程中去。他们是无序的,哪个线程是空闲的,就加到哪个线程上去。

队列和执行总是混淆

GCD还有同步执行(sync)和异步执行(async)。
俩个函数的作用是将任务添加到队列里,它们都会将要执行的操作立刻追加到队列中,区别在于,dispatch_sync会等待操作执行完毕,再执行函数外的操作;dispatch_async不会等待操作执行完毕,而是直接继续执行函数外的操作。

GCD的一些api

下次再更

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值