我想到的
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中如何实现呢?