Я понимаю, что вся параллельная работа внутри актора каким-то образом меняется на последовательную в рамках какого-то процесса синхронизации. Мы видим, что 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
Почему работа с TaskGroup внутри Actor выполняется параллельно? ⇐ IOS
Программируем под IOS
-
Anonymous
1713558416
Anonymous
Я понимаю, что вся параллельная работа внутри актора каким-то образом меняется на последовательную в рамках какого-то процесса синхронизации. Мы видим, что [b]async let[/b]-работа, которая должна выполняться параллельно, выполняется последовательно в [b]Actor1[/b], скорее всего, из-за внутренней синхронизации актера. Но работа [b]withTaskGroup[/b] выполняется параллельно, несмотря на внутреннюю синхронизацию [b]AnActor[/b], но ПОЧЕМУ?)
Изменить: в то же время я хочу сказать, что я понимаю, как работает синхронизация при вызове извне внутренностей актера при использовании [b]await[/b], но я не понимаю, как работает синхронизация внутри актера, для вызова асинхронных параллельных задач внутри актера .
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
Подробнее здесь: [url]https://stackoverflow.com/questions/76520576/why-withtaskgroup-work-runs-in-parallel-inside-actor[/url]
Ответить
1 сообщение
• Страница 1 из 1
Перейти
- Кемерово-IT
- ↳ Javascript
- ↳ C#
- ↳ JAVA
- ↳ Elasticsearch aggregation
- ↳ Python
- ↳ Php
- ↳ Android
- ↳ Html
- ↳ Jquery
- ↳ C++
- ↳ IOS
- ↳ CSS
- ↳ Excel
- ↳ Linux
- ↳ Apache
- ↳ MySql
- Детский мир
- Для души
- ↳ Музыкальные инструменты даром
- ↳ Печатная продукция даром
- Внешняя красота и здоровье
- ↳ Одежда и обувь для взрослых даром
- ↳ Товары для здоровья
- ↳ Физкультура и спорт
- Техника - даром!
- ↳ Автомобилистам
- ↳ Компьютерная техника
- ↳ Плиты: газовые и электрические
- ↳ Холодильники
- ↳ Стиральные машины
- ↳ Телевизоры
- ↳ Телефоны, смартфоны, плашеты
- ↳ Швейные машинки
- ↳ Прочая электроника и техника
- ↳ Фототехника
- Ремонт и интерьер
- ↳ Стройматериалы, инструмент
- ↳ Мебель и предметы интерьера даром
- ↳ Cантехника
- Другие темы
- ↳ Разное даром
- ↳ Давай меняться!
- ↳ Отдам\возьму за копеечку
- ↳ Работа и подработка в Кемерове
- ↳ Давай с тобой поговорим...
Мобильная версия