NSThread для параллельной работы - PullRequest
0 голосов
/ 23 апреля 2019

добавить 1000 элементов (скажем, целочисленных элементов) в массив, используя 4 NSThread.если добавление объектов занимает 1 единицу времени, то добавление 1000 объектов займет 1000 единиц времени.Используя 4 потока, я хочу уменьшить его до 250 единиц.Как этого добиться с помощью NSThreads.Спасибо

1 Ответ

1 голос
/ 23 апреля 2019

Краткий ответ: Вы не можете достичь этого, используя NSThread (или GCD)

Более длинный ответ: тип Objective C NSArray не является поточно-ориентированным и не поддерживает одновременное обновление. В то время как вы можете обернуть NSArray в поточно-ориентированную оболочку, чтобы ее можно было безопасно обновлять более чем одним потоком, такая оболочка могла бы добиться этого путем сериализации обновлений - так что вы не экономите время (и фактически тратите часть на та нить безопасная обертка).

Возможно, вы имели в виду что-то другое: если это не добавление элементов в массив, которые вы хотите перекрывать, а генерация этих элементов перед добавлением, вы можете сделать это с помощью NSThread или GCD . вы также оборачиваете NSArray в потокобезопасную оболочку.

Текущий рекомендуемый способ выполнять параллельные операции - использовать GCD, иначе Dispatch. Если вы прочитаете об этом, вы найдете, как сделать массив потокобезопасным, используя последовательную очередь и барьерные операции, и как запустить ваши 4 задачи, используя параллельную очередь.

НТН

...