Last active
December 17, 2015 22:08
-
-
Save alloy/5679340 to your computer and use it in GitHub Desktop.
Concurrent mapping with GCD.
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
- (void)mapConcurrent; | |
{ | |
NSArray *originals = self.listOfObjects; | |
NSUInteger count = originals.count; | |
NSMutableArray *collected = [[NSMutableArray alloc] initWithCapacity:count]; | |
dispatch_group_t workGroup = dispatch_group_create(); | |
dispatch_queue_t assignmentQueue = dispatch_queue_create("com.example.SerialAssignmentQueue", DISPATCH_QUEUE_SERIAL); | |
dispatch_queue_t concurrentQueue = dispatch_get_global_queue(DISPATCH_QUEUE_PRIORITY_DEFAULT, 0); | |
for (NSUInteger i = 0; i < count; i++) { | |
dispatch_group_async(workGroup, assignmentQueue, ^{ | |
// First ensure the destination slot exists, otherwise we can't assign the | |
// slot by index later on. | |
[collected addObject:[NSNull null]]; | |
dispatch_group_async(workGroup, concurrentQueue, ^{ | |
id original = originals[i]; | |
id result = [original performWork]; | |
dispatch_group_async(workGroup, assignmentQueue, ^{ | |
collected[i] = result; | |
}); | |
}); | |
}); | |
} | |
dispatch_group_wait(workGroup, DISPATCH_TIME_FOREVER); | |
} |
I’m not sure it’s really needed vs just using the block version directly. The other problem is that you can use all sorts of funky syntax in normal KVC collection key paths and I don’t know if that would be easy to support.
Good points. I think the universe is telling me something, this isn't the first "convenience" method I've suggested in the past couple weeks that had its issues.
PS I’m gone this weekend, so don’t wait for me if you want to hack on this :)
Have a good weekend then. I may spend some time on this diversion, we'll see how the weekend plays out.
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
I hadn’t even noticed that. I’ve run it few more times and it’s pretty consistent.