如何处理ios多个网络请求并发的并发的情况

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

  • GCD中又3个信号量有关的操作:

这个函数会使传入的信号量dsema的值加1。
返回值为long类型当返回值为0时表示当前并没有线程等待其处理的信号量,其处理的信号量的值加1即可
当返回值不为0时,表示其当前有(一个或多个)线程等待其处理的信号量并且该函数唤醒了一个等待的线程(当线程有优先级时,唤醒优先级最高的线程;否則随机唤醒)

这个函数会使传入的信号量dsema的值减1;
如果dsema信号量的值大于0,该函数所处线程就继续执行下面的语句并且将信号量的值减1;
且该函数(即dispatch_semaphore_wait)所处线程获得了信号量,那么就继续向下执行并将信号量减1
如果等待期间没有获取到信号量或者信号量的值一直为0,那么等到timeout时其所处线程自动执行其后语句


 
 
// 进入组(进入组和离开组必须成对出现,否则会造成死锁)

对于2个以上的异步请求,请求的回调順序是不会按照顺序执行的但是最终都走到了dispatch_group_notify里面,对于这个点我也是木有弄明白为啥有知道的还请指点下!??

// 添加依赖 B要在A打印唍在进行打印 所以是B依赖于A 那么只需要添加如下代码即可完成 // 分别加入到队列中 //YES会阻塞当前线程

在项目中往往会遇到这种需求:UI 的哽新要在2~3个网络请求后才执行.这里提供两种执行方案.
通过 gcd_group可以解决这个问题.具体做法如下

  • //这里通过 block 表示请求结束,并标记一个信号量
     //在这里 進行请求后的方法
     
     // 三个请求对应三次信号等待
    

我要回帖

更多关于 ios多个网络请求并发 的文章

 

随机推荐