TaskGroup не работает параллельно с iOS 15IOS

Программируем под IOS
Ответить Пред. темаСлед. тема
Anonymous
 TaskGroup не работает параллельно с iOS 15

Сообщение Anonymous »

фон
Мое приложение - игра головоломки для числа головоломок, которые получены из латинской площади. Загадки не Судоку -головоломки, но в некоторых отношениях похожи. В настоящее время приложение работает на iOS 15 и позже. Я хотел бы, чтобы это было так, по крайней мере, на некоторое время, если возможно. Это работает, генерируя латинскую площадь случайным образом, а затем видя, можно ли превратить его в решаемую головоломку с уникальным решением. Скорость попадания очень низкая, поэтому процесс генерации очень интенсивный процессор. Как только любая из четырех задач находит действительную головоломку, процесс генерации успешно. Три задачи, которые не генерировали головоломку, просто отменены. Задачи начали с использованием Dispatchqueue.global (qos: .userinitiated) .async и синхронизированный с использованием семафора. Сейчас я пытаюсь преобразовать это в структурированную параллелизм, используя Async/await .
Проблема
Новый подход к генерации головоломки использует группу задач . Четыре задачи добавляются в группу задач, затем, как только первая задача получила загадку, остальные три задачи отменяются. Однако, работая на iOS 15, кажется, что задачи не работают параллельно. Это, по крайней мере, мой вывод, основанный на загрузке процессора, который наблюдается при запуске из XCode с симулятором: < /p>
  • При запуске любого симулятора для версий iOS 16 и выше нагрузка ЦП на Mac составляет от 300 до 400% -> OK. Нагрузка на процессор составляет около 100% -> nok.
минимальный воспроизводимый пример
Ниже приведена упрощенная версия генератора. Процесс генерации, интенсивной процессора, эмулируется путем генерации случайных чисел в диапазоне 0 ..

Код: Выделить всё

struct Puzzle {
let val: Int
}

struct PuzzleGenerator {
let index: Int

func generatePuzzle() async -> Puzzle? {
var val: Int
repeat {
val = Int.random(in: 0.. 0 && !Task.isCancelled
if val == 0 {
print("puzzle generated successully by generator \(index)")
}
return val > 0 ? nil : Puzzle(val: val)
}
}

enum GeneratorCommand {
case wait
case generate
case abort
}

struct ContentView: View {
@State private var command = GeneratorCommand.wait
@State private var elapsedSecs: Int?

private nonisolated func generatePuzzle() async -> Puzzle? {
await withTaskGroup(of: Puzzle?.self) { group in

// Add 4 worker tasks to the group
for i in 0..
Чтобы увидеть проблему, нажмите кнопку «генерировать головоломку» и наблюдать за нагрузкой процессора. < /p>

  Напомним, проблема  происходит только с ios 15 < /strong>, он работает нормально на IOS -версиях 16 и выше. 16 и выше, только одна задача генератора сообщает успех (заявление печати). С iOS 15 все 4 задачи генератора сообщают о успешном завершении. Может быть, есть простое объяснение с тем, как работает int.random 
(или не работает), когда используется из одновременных задач? Могу ли я исправить код так, чтобы 4 задачи работали параллельно на iOS 15?


Подробнее здесь: https://stackoverflow.com/questions/796 ... ith-ios-15
Реклама
Ответить Пред. темаСлед. тема

Быстрый ответ

Изменение регистра текста: 
Смайлики
:) :( :oops: :roll: :wink: :muza: :clever: :sorry: :angel: :read: *x)
Ещё смайлики…
   
К этому ответу прикреплено по крайней мере одно вложение.

Если вы не хотите добавлять вложения, оставьте поля пустыми.

Максимально разрешённый размер вложения: 15 МБ.

  • Похожие темы
    Ответы
    Просмотры
    Последнее сообщение
  • Почему работа с TaskGroup внутри Actor выполняется параллельно?
    Anonymous » » в форуме IOS
    0 Ответы
    17 Просмотры
    Последнее сообщение Anonymous
  • Как предотвратить отмену всех задач Python3.11 TaskGroup
    Anonymous » » в форуме Python
    0 Ответы
    43 Просмотры
    Последнее сообщение Anonymous
  • Метод экземпляра wait недоступен в асинхронном контексте; Вместо этого используйте TaskGroup; это ошибка в Swift 6
    Anonymous » » в форуме IOS
    0 Ответы
    27 Просмотры
    Последнее сообщение Anonymous
  • Как обрабатывать задачи по мере их выполнения при использовании TaskGroup?
    Anonymous » » в форуме Python
    0 Ответы
    14 Просмотры
    Последнее сообщение Anonymous
  • Как обрабатывать задачи по мере их выполнения при использовании TaskGroup?
    Anonymous » » в форуме Python
    0 Ответы
    11 Просмотры
    Последнее сообщение Anonymous

Вернуться в «IOS»