class多次并行的执行方法
Executing method of a class multiple times parallel
我有一个数组——比如 wordsArray,其中 wordArray 的每个对象都是另一个数组——比如 wordList。使用 for 循环,我选择每个对象 (wordList) 并调用一个方法 - 另一个 class 的 wordScore ,它将 return NSDictionary
与单词和分数。不是一个一个地为每个对象调用 wordScore,有没有办法可以 运行 它们并行?每个 wordList 的 wordScore 应该并行执行,并且在执行结束时每个 wordScore 的所有 NSDictionaries
应该合并成一个 NSDictionary
.
假设我有这样的傻事class
@interface MyWordClass: NSObject
- (NSDictionary *)wordScore:(NSArray *)wordList;
@end
@implementation MyWordClass
- (NSDictionary *)wordScore:(NSArray *)wordList {
NSMutableDictionary *scores = [NSMutableDictionary new];
for (NSString *word in wordList) {
scores[word] = @(word.hash %100);
}
return [scores copy];
}
@end
从这里开始,我将对 wordsArray
进行并发枚举。我在每个并发迭代中创建了一个 MyWordClass
的新实例。最后,我用一个@synchronized
块来累加结果。
NSArray *wordsArray = @[@[@"a", @"b", @"c"], @[@"1", @"2", @"3"]];
NSMutableDictionary *result = [NSMutableDictionary new];
[wordsArray enumerateObjectsWithOptions:NSEnumerationConcurrent usingBlock:^(NSArray *wordList, NSUInteger idx, BOOL *stop) {
// The scores are being calculated concurrently
NSDictionary *scores = [[MyWordClass new] wordScore:wordList];
@synchronized(result) {
[result addEntriesFromDictionary:scores];
}
}];
NSLog(@"%@", result);
重要的是 1) 进行并发枚举,2) 不要在并发块中使用共享实例,以及 3) 使用 @synchronized
块来收集结果。
我有一个数组——比如 wordsArray,其中 wordArray 的每个对象都是另一个数组——比如 wordList。使用 for 循环,我选择每个对象 (wordList) 并调用一个方法 - 另一个 class 的 wordScore ,它将 return NSDictionary
与单词和分数。不是一个一个地为每个对象调用 wordScore,有没有办法可以 运行 它们并行?每个 wordList 的 wordScore 应该并行执行,并且在执行结束时每个 wordScore 的所有 NSDictionaries
应该合并成一个 NSDictionary
.
假设我有这样的傻事class
@interface MyWordClass: NSObject
- (NSDictionary *)wordScore:(NSArray *)wordList;
@end
@implementation MyWordClass
- (NSDictionary *)wordScore:(NSArray *)wordList {
NSMutableDictionary *scores = [NSMutableDictionary new];
for (NSString *word in wordList) {
scores[word] = @(word.hash %100);
}
return [scores copy];
}
@end
从这里开始,我将对 wordsArray
进行并发枚举。我在每个并发迭代中创建了一个 MyWordClass
的新实例。最后,我用一个@synchronized
块来累加结果。
NSArray *wordsArray = @[@[@"a", @"b", @"c"], @[@"1", @"2", @"3"]];
NSMutableDictionary *result = [NSMutableDictionary new];
[wordsArray enumerateObjectsWithOptions:NSEnumerationConcurrent usingBlock:^(NSArray *wordList, NSUInteger idx, BOOL *stop) {
// The scores are being calculated concurrently
NSDictionary *scores = [[MyWordClass new] wordScore:wordList];
@synchronized(result) {
[result addEntriesFromDictionary:scores];
}
}];
NSLog(@"%@", result);
重要的是 1) 进行并发枚举,2) 不要在并发块中使用共享实例,以及 3) 使用 @synchronized
块来收集结果。