84669 人学习
152542 人学习
20005 人学习
5487 人学习
7821 人学习
359900 人学习
3350 人学习
180660 人学习
48569 人学习
18603 人学习
40936 人学习
1549 人学习
1183 人学习
32909 人学习
我想到的
for iOS 1.用dispatch_group实现 2.用RunLoop实现
还有没有其他的比较好的实现方式,求关于并发编程的文章.
欢迎选择我的课程,让我们一起见证您的进步~~
有人说了 NSOperation,我就不说了。但我更喜欢 GCD。这个问题可以用 barrier 解决:
dispatch_queue_t queue = dispatch_queue_create("JOHNSHAW", DISPATCH_QUEUE_CONCURRENT); dispatch_async(queue, ^{ NSLog(@"task 1"); sleep(1); }); dispatch_async(queue, ^{ NSLog(@"task 2"); sleep(1); }); dispatch_barrier_async(queue, ^{ NSLog(@"after task 1 and task 2"); sleep(1); }); dispatch_async(queue, ^{ NSLog(@"do someting else"); });
其实我更喜欢 RAC,不过 RAC 毕竟是个重型框架,用的公司并不多
RACSignal *task1 = ...; RACSignal *task2 = ...; [[RACSignal combineLatest:@[task1,task2]] subscribeNext:^(id x) { NSLog(@"after task1 and task2 "); }];
用RxAndroid。一个.zip方法就搞定了。。
比较好的方式使用NSOperation 因为有addDependecy方法~
For javascript:
https://github.com/caolan/async处理异步的并行与串行都很方便
用jQuery的Promise, 或其它库的Promise实现 :)
借鉴下map reduce方法,类似于归并排序的思路
正常使用 dispatch_group_wait 和 dispatch_group_notify 就好了。
还可以使用 dispatch_barrier_sync / dispatch_barrier_async,将收到所有响应之后的操作用作 barrier block,那么这个 block 就会等待所有网络请求结束之后再执行。
不知道你问的Android还是iOS, 如果是Android用CountDownLatch来控制线程吧
java的话,用concurrent包的future api可以实现多线程分别请求,然后全部响应后处理结果。
for iOS创建一个串行队列处理。不影响外部并发请求。
JS中如何实现呢?
有人说了 NSOperation,我就不说了。
但我更喜欢 GCD。这个问题可以用 barrier 解决:
其实我更喜欢 RAC,不过 RAC 毕竟是个重型框架,用的公司并不多
用RxAndroid。一个.zip方法就搞定了。。
比较好的方式使用NSOperation 因为有addDependecy方法~
For javascript:
https://github.com/caolan/async
处理异步的并行与串行都很方便
用jQuery的Promise, 或其它库的Promise实现 :)
借鉴下map reduce方法,类似于归并排序的思路
正常使用 dispatch_group_wait 和 dispatch_group_notify 就好了。
还可以使用 dispatch_barrier_sync / dispatch_barrier_async,将收到所有响应之后的操作用作 barrier block,那么这个 block 就会等待所有网络请求结束之后再执行。
不知道你问的Android还是iOS, 如果是Android用CountDownLatch来控制线程吧
java的话,用concurrent包的future api可以实现多线程分别请求,然后全部响应后处理结果。
for iOS
创建一个串行队列处理。不影响外部并发请求。
JS中如何实现呢?