Почему работа с TaskGroup внутри Actor выполняется параллельно?IOS

Программируем под IOS
Ответить Пред. темаСлед. тема
Anonymous
 Почему работа с TaskGroup внутри Actor выполняется параллельно?

Сообщение Anonymous »

Я понимаю, что вся параллельная работа внутри актора каким-то образом меняется на последовательную в рамках какого-то процесса синхронизации. Мы видим, что async let-работа, которая должна выполняться параллельно, выполняется последовательно в Actor1, скорее всего, из-за внутренней синхронизации актера. Но работа withTaskGroup выполняется параллельно, несмотря на внутреннюю синхронизацию AnActor, но ПОЧЕМУ?)
Изменить: в то же время я хочу сказать, что я понимаю, как работает синхронизация при вызове извне внутренностей актера при использовании await, но я не понимаю, как работает синхронизация внутри актера, для вызова асинхронных параллельных задач внутри актера .
import SwiftUI

@main
struct MyApp: App {
var body: some Scene {
WindowGroup {
ContentView().task {
//await AnActor().performAsyncTasks() // uncomment this alternately and run
//await Actor1().performAsyncTasks() // uncomment this alternately and run
}
}
}
}

actor Actor1 {

func performAsyncTasks() async {
async let _ = asyncTasks1() // this not running in parallel
async let _ = asyncTasks2() // this not running in parallel
}

func asyncTasks1() async {
for i in 1...10_000_0 {
print("In Task 1: \(i)")
}
}

func asyncTasks2() async {
for i in 1...10_000_0 {
print("In Task 2: \(i)")
}
}
} // the printed text are in series with Task 1 and Task 2 in console

actor AnActor {
var value = 0

func performAsyncTasks() async {
value = await withTaskGroup(of: Int.self) { group in
group.addTask { // this running in parallel, why?!
var value1 = 0
for _ in 1...10_000 {
print("Task1")
value1 += 1
}
return value1
}

group.addTask { // this running in parallel, why?!
var value2 = 0
for _ in 1...10_000 {
value2 += 1
print("Task2")
}
return value2
}

return await group.reduce(0, +)
}

print(value)
}
} // the printed text are mixed with Task 1 and Task 2 in console


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

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

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

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

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

  • Похожие темы
    Ответы
    Просмотры
    Последнее сообщение
  • TaskGroup не работает параллельно с iOS 15
    Anonymous » » в форуме IOS
    0 Ответы
    2 Просмотры
    Последнее сообщение Anonymous
  • Я сделал очень простую игру Pygame Zero, но мое изображение Actor и screen.clear() не работают. Можете ли вы помочь мне
    Anonymous » » в форуме Python
    0 Ответы
    18 Просмотры
    Последнее сообщение Anonymous
  • RPG Maker MZ Actor для битвы нацелена на битву
    Anonymous » » в форуме Javascript
    0 Ответы
    29 Просмотры
    Последнее сообщение Anonymous
  • Как предотвратить отмену всех задач Python3.11 TaskGroup
    Anonymous » » в форуме Python
    0 Ответы
    43 Просмотры
    Последнее сообщение Anonymous
  • Метод экземпляра wait недоступен в асинхронном контексте; Вместо этого используйте TaskGroup; это ошибка в Swift 6
    Anonymous » » в форуме IOS
    0 Ответы
    26 Просмотры
    Последнее сообщение Anonymous

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