Aus öffentlichen Paketdaten erstellte Orientierung.
Squadron ist ein Dart/Flutter-Paket, das Multithreading über Isolate- und Web Worker-Pools ermöglicht und CPU-intensive sowie aufwändige I/O-Operationen von der Hauptthread abzieht. Es vereinfacht die parallele Ausführung über Plattformen wie Android, iOS, Web, macOS, Windows und Linux hinweg. Durch die Nutzung von Isolaten auf nativen Plattformen und Web Workers im Web verbessert Squadron die Reaktionsfähigkeit und Leistung der Anwendung. Das Paket bietet eine benutzerfreundliche API zum Verwalten von Arbeitsthreads und zur Aufgabenzuteilung.
Anwendungsfälle
CPU-intensive Berechnungen auslagern
Behandlung großer Datei-I/O-Operationen
Verbesserung der Benutzeroberflächenreaktionsfähigkeit bei intensiven Aufgaben
Ausführung der Hintergrunddatenverarbeitung
Langlaufende Algorithmen ausführen, ohne die Hauptthread zu blockieren
Hauptmerkmale
Unterstützt Isolate- und Web Worker-Pools
Plattformübergreifende Kompatibilität
Einfaches Task-Submission-API
Automatische Arbeitskräfteverwaltung
Eingebaute Fehlerbehandlung
Thread-sichere Kommunikation
Geeignet für
Entwickler, die eine leistungsstarke Hintergrundverarbeitung benötigen
Apps mit komplexen Datenumwandlungen
Medien- oder Bildverarbeitungs-Apps
Tools für Echtzeit-Datenanalyse
Anwendungen, die während schwerer Workloads eine reaktive Benutzeroberfläche erfordern
Hinweise
Erfordert Verständnis von Isolaten und Konkurrenz
Kann den Speicherverbrauch bei vielen Workern erhöhen
Web-Unterstützung eingeschränkt durch Browser-Funktionen
Nicht geeignet für leichte Aufgaben
Erfordert sorgfältige Zustandsverwaltung über Threads hinweg
Original-README
Originaler README-Schnappschuss aus dem verknüpften Quell-Repository. Aktuelle Inhalte finden Sie im Repository.
Squadron - Multithreading and worker pools in Dart
Offload CPU-bound and long running tasks and give your apps some air!
Works everywhere: Desktop, Server, Mobile, and Browser (JS & WASM).
Dart is single-threaded by nature. While Isolate.run() is great for one-off tasks, it creates overhead for frequent operations, and is not available on browser platforms.
Squadron provides:
🔄 Persistent Worker Pools: Keep workers alive and ready to process tasks instantly.
🌐 Seamless Web Support: Uniform API for Isolates (Native) and Web Workers (JS/Wasm).
🛡️ Type Safety: Automatic code generation ensures your thread boundaries are type-safe.
📡 Streaming: Native support for Stream return types from workers.
🏗️ Architecture
sequenceDiagram
autonumber
participant App as Main App (UI)
box rgb(40, 100, 200, 0.1) Squadron / Generated Code
participant Pool as HelloWorldWorkerPool/Worker
end
box rgb(0, 150, 0, 0.1) Background Thread
participant Service as User Service
end
App->>Pool: worker.hello('Squadron')
Pool->>Service: Assign Task (Marshaled)
activate Service
Note over Service: Executing on background Isolate/Web Worker
Service-->>Pool: Return Result (Unmarshaled)
deactivate Service
Pool-->>App: Future<String> Result
Squadron uses code generation to handle the boilerplate of thread communication. Run the following command:
dart run build_runner build
This creates HelloWorldWorker and HelloWorldWorkerPool. These classes implement the same interface as your service but proxy calls to background threads.
4. Running your Worker
In your application, instantiate the worker and use it like a normal service.
[!IMPORTANT] Always stop your workers. Failure to call worker.stop() will keep your program running indefinitely.
import'hello_world.dart';
voidmain() async {
final worker = HelloWorldWorker();
try {
// Squadron starts the worker automatically on the first callfinal message = await worker.hello('Squadron');
print(message);
} finally {
worker.stop(); // Clean up the background thread
}
}
🌍 Web Support (JS & Wasm)
Squadron is designed for a "write once, run anywhere" experience. When targeting the web, you must compile your worker entry points:
# Compile to JavaScript
dart compile js ".\src\lib\hello_world.web.g.dart" -o "..\web\workers\hello_world.web.g.dart.js"# Compile to Web Assembly
dart compile wasm ".\src\lib\hello_world.web.g.dart" -o "..\web\workers\hello_world.web.g.dart.wasm"
Squadron will automatically detect the runtime environment and choose the correct implementation.
🛠️ Advanced Concepts
Data Transfer & Marshaling
Because workers run in separate memory spaces, data must be serialized ("marshaled") to cross thread boundaries. While base types (Strings, Numbers, Lists, Maps) are handled automatically, custom objects require a SquadronMarshaler.
Exceptions thrown in a worker are caught, serialized, and re-thrown on the caller's side, preserving the stack trace and error information where possible.
Debugging background workers can be tricky. Squadron provides mechanisms to forward log messages from workers back to the main thread's debugger or console.