mirror of
https://github.com/immich-app/immich
synced 2025-10-17 18:19:27 +00:00
always use at-least 5 isolates
This commit is contained in:
parent
e9616a3fbc
commit
425eb2c66e
4 changed files with 12 additions and 9 deletions
|
|
@ -35,7 +35,6 @@ import 'package:immich_mobile/utils/http_ssl_options.dart';
|
||||||
import 'package:immich_mobile/wm_executor.dart';
|
import 'package:immich_mobile/wm_executor.dart';
|
||||||
import 'package:isar/isar.dart';
|
import 'package:isar/isar.dart';
|
||||||
import 'package:logging/logging.dart';
|
import 'package:logging/logging.dart';
|
||||||
import 'package:worker_manager/worker_manager.dart';
|
|
||||||
|
|
||||||
class BackgroundWorkerFgService {
|
class BackgroundWorkerFgService {
|
||||||
final BackgroundWorkerFgHostApi _foregroundHostApi;
|
final BackgroundWorkerFgHostApi _foregroundHostApi;
|
||||||
|
|
@ -94,7 +93,7 @@ class BackgroundWorkerBgService extends BackgroundWorkerFlutterApi {
|
||||||
await Future.wait(
|
await Future.wait(
|
||||||
[
|
[
|
||||||
loadTranslations(),
|
loadTranslations(),
|
||||||
workerManagerForIos.init(dynamicSpawning: true),
|
workerManagerPatch.init(dynamicSpawning: true),
|
||||||
_ref?.read(authServiceProvider).setOpenApiServiceEndpoint(),
|
_ref?.read(authServiceProvider).setOpenApiServiceEndpoint(),
|
||||||
// Initialize the file downloader
|
// Initialize the file downloader
|
||||||
FileDownloader().configure(
|
FileDownloader().configure(
|
||||||
|
|
@ -199,7 +198,7 @@ class BackgroundWorkerBgService extends BackgroundWorkerFlutterApi {
|
||||||
_cancellationToken.cancel();
|
_cancellationToken.cancel();
|
||||||
_logger.info("Cleaning up background worker");
|
_logger.info("Cleaning up background worker");
|
||||||
final cleanupFutures = [
|
final cleanupFutures = [
|
||||||
workerManagerForIos.dispose().catchError((_) async {
|
workerManagerPatch.dispose().catchError((_) async {
|
||||||
// Discard any errors on the dispose call
|
// Discard any errors on the dispose call
|
||||||
return;
|
return;
|
||||||
}),
|
}),
|
||||||
|
|
|
||||||
|
|
@ -1,5 +1,6 @@
|
||||||
import 'dart:async';
|
import 'dart:async';
|
||||||
import 'dart:io';
|
import 'dart:io';
|
||||||
|
import 'dart:math';
|
||||||
|
|
||||||
import 'package:auto_route/auto_route.dart';
|
import 'package:auto_route/auto_route.dart';
|
||||||
import 'package:background_downloader/background_downloader.dart';
|
import 'package:background_downloader/background_downloader.dart';
|
||||||
|
|
@ -38,10 +39,10 @@ import 'package:immich_mobile/utils/debug_print.dart';
|
||||||
import 'package:immich_mobile/utils/http_ssl_options.dart';
|
import 'package:immich_mobile/utils/http_ssl_options.dart';
|
||||||
import 'package:immich_mobile/utils/licenses.dart';
|
import 'package:immich_mobile/utils/licenses.dart';
|
||||||
import 'package:immich_mobile/utils/migration.dart';
|
import 'package:immich_mobile/utils/migration.dart';
|
||||||
|
import 'package:immich_mobile/wm_executor.dart';
|
||||||
import 'package:intl/date_symbol_data_local.dart';
|
import 'package:intl/date_symbol_data_local.dart';
|
||||||
import 'package:logging/logging.dart';
|
import 'package:logging/logging.dart';
|
||||||
import 'package:timezone/data/latest.dart';
|
import 'package:timezone/data/latest.dart';
|
||||||
import 'package:immich_mobile/wm_executor.dart';
|
|
||||||
|
|
||||||
void main() async {
|
void main() async {
|
||||||
ImmichWidgetsBinding();
|
ImmichWidgetsBinding();
|
||||||
|
|
@ -50,7 +51,7 @@ void main() async {
|
||||||
await Bootstrap.initDomain(isar, drift, logDb);
|
await Bootstrap.initDomain(isar, drift, logDb);
|
||||||
await initApp();
|
await initApp();
|
||||||
// Warm-up isolate pool for worker manager
|
// Warm-up isolate pool for worker manager
|
||||||
await workerManagerForIos.init(dynamicSpawning: true, isolatesCount: 6);
|
await workerManagerPatch.init(dynamicSpawning: true, isolatesCount: max(Platform.numberOfProcessors - 1, 5));
|
||||||
await migrateDatabaseIfNeeded(isar, drift);
|
await migrateDatabaseIfNeeded(isar, drift);
|
||||||
HttpSSLOptions.apply();
|
HttpSSLOptions.apply();
|
||||||
|
|
||||||
|
|
|
||||||
|
|
@ -32,7 +32,7 @@ Cancelable<T?> runInIsolateGentle<T>({
|
||||||
throw const InvalidIsolateUsageException();
|
throw const InvalidIsolateUsageException();
|
||||||
}
|
}
|
||||||
|
|
||||||
return workerManagerForIos.executeGentle((cancelledChecker) async {
|
return workerManagerPatch.executeGentle((cancelledChecker) async {
|
||||||
T? result;
|
T? result;
|
||||||
await runZonedGuarded(
|
await runZonedGuarded(
|
||||||
() async {
|
() async {
|
||||||
|
|
|
||||||
|
|
@ -1,13 +1,16 @@
|
||||||
// part of 'package:worker_manager/worker_manager.dart';
|
// part of 'package:worker_manager/worker_manager.dart';
|
||||||
|
// ignore_for_file: implementation_imports, avoid_print
|
||||||
|
|
||||||
import 'dart:async';
|
import 'dart:async';
|
||||||
import 'dart:math';
|
import 'dart:math';
|
||||||
|
|
||||||
import 'package:collection/collection.dart';
|
import 'package:collection/collection.dart';
|
||||||
import 'package:flutter/foundation.dart';
|
import 'package:flutter/foundation.dart';
|
||||||
import 'package:worker_manager/worker_manager.dart';
|
import 'package:worker_manager/src/number_of_processors/processors_io.dart';
|
||||||
import 'package:worker_manager/src/worker/worker.dart';
|
import 'package:worker_manager/src/worker/worker.dart';
|
||||||
|
import 'package:worker_manager/worker_manager.dart';
|
||||||
|
|
||||||
final workerManagerForIos = _Executor();
|
final workerManagerPatch = _Executor();
|
||||||
|
|
||||||
// [-2^54; 2^53] is compatible with dart2js, see core.int doc
|
// [-2^54; 2^53] is compatible with dart2js, see core.int doc
|
||||||
const _minId = -9007199254740992;
|
const _minId = -9007199254740992;
|
||||||
|
|
@ -49,7 +52,7 @@ class _Executor extends Mixinable<_Executor> with _ExecutorLogger {
|
||||||
final _pool = <Worker>[];
|
final _pool = <Worker>[];
|
||||||
var _nextTaskId = _minId;
|
var _nextTaskId = _minId;
|
||||||
var _dynamicSpawning = false;
|
var _dynamicSpawning = false;
|
||||||
var _isolatesCount = 5;
|
var _isolatesCount = numberOfProcessors;
|
||||||
|
|
||||||
@override
|
@override
|
||||||
Future<void> init({int? isolatesCount, bool? dynamicSpawning}) async {
|
Future<void> init({int? isolatesCount, bool? dynamicSpawning}) async {
|
||||||
|
|
|
||||||
Loading…
Add table
Add a link
Reference in a new issue