我想到的
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中如何實現?