【转】并发、并行,以及iOS中dispatch_semaphore的应用

并发:同一个时间内运行多个任务。又叫共行性,是指处理多个同时性活动的能力。
并行:是指两个并发的任务同时发生。

并发不一定并行,并发不一定要同时发生。

举个例子:

有两个快递分别要送到目的地,有以下两种方案:

(1)一个快递员分别把两个快递送到对应的目的地。(并发)

(2)两个快递员同时送一个快递到目的地。(并行)

在iOS中,经常可以看见有这样的需求,就是一个方法要等另外一个方法执行完毕再做相对应的处理,比如说一些网络请求,需要根据上一个请求的返回值做相对应的处理再执行第二个请求,所以我们不能让两个请求同时去请求网络。

dispatch_semaphore(GDC)

信号量是一个整型值并且具有初始计数值,信号量通常支持两个操作:通知和等待。当信号被通知的时候计数值会增加,当信号量在线程上等待的时候,必要的情况下线程会被阻塞掉,直至信号被通知时计数值大于0,然后线程会减少这个计数继续工作。
GCD中又3个信号量有关的操作:

dispatch_semaphore_create     信号量创建

dispatch_semaphore_signal      发送通知

dispatch_semaphore_wait         信号量等待

 

 

“【转】并发、并行,以及iOS中dispatch_semaphore的应用”的2个回复

  1. 我认为,dispatch_queue的concurrent是在时间上重叠的,也是按照添加顺序依次执行的,所以我觉得称为并发队列更合适。
    博主博文举得栗子实在是不懂?
    并发和并行 ?

发表评论

电子邮件地址不会被公开。 必填项已用*标注

This site uses Akismet to reduce spam. Learn how your comment data is processed.