squadron 6.0.3
squadron: ^6.0.3 copied to clipboard
Multithreading and worker thread pool for Dart / Flutter, to offload CPU-bound and heavy I/O tasks to Isolate or Web Worker threads.
6.0.3 #
- Use
DirectCastConverteron native platforms.
6.0.2 #
- Update documentation.
6.0.1 #
- Fix wasm compatibility issues reported by pub.flutter-io.cn.
6.0.0 #
- /!\ BREAKING CHANGES /!\
- Merged
worker_monitorintoworker_runner. - Removed
SerializeWithannotation. - Removed custom cancelation token implementations and switched to
package:cancelation_token. - Removed custom logger implementations and switched to
package:loggerfor logging. - Reworked the Squadron singleton.
- Worker methods
send()andstream()are no longer generic: they returnFuture<dynamic>andStream<dynamic>. It is now the user responsibility to ensure service arguments and return values are properly handled in terms of Dart type. One major caveat comes from Web Assembly, where Dartintvalues sent from one side are received as Dartdoublevalues on the other side. To help with conversions, Squadron provides converters and selects the proper converter depending on the runtime platform, so you can "cast" values on either side of the service call (seeSquadron.convertersinsquadron_singleton.dart). The recommendation is to use squadron_builder to generate the code for your workers -- it will take care of casting and marshaling. - Reworked unit tests, and made unit tests cover VM, JS/JS and JS/Wasm scenarios. Wasm/JS and Wasm/Wasm are not unit tested yet.
- Published the test console to enable testing of all combinations.
- Also published the test coverage report.
5.1.6 #
- Reworked exception deserializer management to protect from multiple registrations and allow for deregistration. See https://github.com/d-markey/squadron/issues/27#issuecomment-1717452323.
- Added support for installable/uninstallable worker services. If a service needs to take action after the worker thread has started or before it is stopped, it should extend or implement
ServiceInstallerand provide one or both ofinstall()/uninstall(). These methods will be called on platform thread setup/teardown. See https://github.com/d-markey/squadron/issues/29#issuecomment-1719682340.
5.1.5 #
- Removed
stdout_logger.dartbecause it importsdart:iowhich made pub.flutter-io.cn revoke the support for Web platforms.
5.1.4 #
- BREAKING CHANGE: Removed
squadron_service.dart,squadron_worker.dartandsquadron_local_worker.dartlibraries: import onlysquadron.dartinstead. - Added check to verify Web worker entry point exists upon error.
- Reorganized source code.
- Added topics and funding to pubspec.
5.1.3 #
- Add unit test raising a 'Null check operator used on a null value' exception when cancelling a streaming service method + stopping the worker.
- Fix 'Null check operator used on a null value' exception when cancelling a streaming service method + stopping the worker.
5.1.2 #
- Fix 'marshal' typo -- provide a compatibility layer to mark as deprecated all versions using 'marshall' and mark these artefacts as deprecated. They will eventually be removed.
PlatformWorkerHookandEntryPointaliases now returnFutureOr<void>.
5.1.1 #
- Use
DateTime.now().toUtc()instead ofDartTime.timestamp()which is available starting from Dart 3 only. Fixes https://github.com/d-markey/squadron/issues/22.
5.1.0 #
- Make
WorkerRequestandWorkerResponsealiases ofListto minimize serialization overhead. Replace previousWorkerRequestandWorkerResponseimplementations with extension methods. This may be a breaking change. - Add
EntryPointandPlatformWorkertypedefs to enforce type safety across runtime platforms.EntryPointandPlatformWorkershould both resolve todynamicin the IDE. At compile time, they should resolve to the concrete types according to the platform (ie.StringandWorkerfromdart:htmlfor Web platforms,FutureOr<void> Function(List)andIsolateon native platforms). This should help prevent issues such as https://github.com/d-markey/squadron/issues/17. - Provide access to platform worker instance upon initialization. See https://github.com/d-markey/squadron/issues/20.
5.0.0 #
- Enable support of Dart 3.
- Breaking change: use
Listinstead ofMapfor serialization of worker request/response.
4.3.8 #
- Downgrade
metaversion to^1.8.0to matchflutter_testrequirements (fix for https://github.com/d-markey/squadron/issues/18).
4.3.7 #
- Ensure uniqueness of cancellation token IDs across workers (breaking change for classes implementing/deriving from
CancellationToken:idis now aString).
4.3.6 #
- Downgrade
metaversion to^1.8.0to matchflutter_testrequirements. - Fix pool scheduler algorithm to ensure worker availability before dispatching tasks.
4.3.5 #
- Add
UseLoggerannotation to have package squadron_builder generate the associated code in worker threads.
4.3.4 #
- Add notifications when a worker is added or removed. Interested components can register listeners (callbacks) for these notifications.
- Disable automatic log-forwarding between workers and their parents. It is possible to restore this behaviour manually by using [ParentSquadronLogger] as a logger during initialization of the platform worker.
- Split logging logic between message formatting vs. emitting.
4.3.3 #
- Rename
SquadronSerializertoSquadronMarshaller. - Update dev dependencies.
4.3.2 #
WorkerResponse: ifresultis anIterablebut not aList, calltoList()to get results before serializing the response back to the caller.SerializeWith: annotation used to indicate how to marshal data to/from a service running in a Worker. See alsoSquadronSerializerclass.
4.3.1 #
CancellationToken: provideFuture<bool> isCancelled({bool throwIfCancelled = false})to make it easier to check cancellation token status in worker services.
4.3.0 #
ValueWrapper: check future hasn't already completed before callingcomplete()orcompleteError().
4.2.0 #
- Add
baseUrlparameter toSquadronServiceannotation.
4.1.0 #
- Now with annotations to support code generation. To be used with package
squadron-builder.
4.0.0 #
- Breaking changes: all deprecated artefacts have been removed.
- Breaking change:
LocalSquadronLoggerhas been deleted. - Breaking change: the
argsandtokenarguments of methodssend()andstream()are now named argument. - Breaking change: removed the optional
idparameter that was passed toWorkerconstructors. - Breaking change: disabled message inspection for Web channels. In previous versions, Squadron would inspect each piece of data exchanged via
_JsChannels to identify objects whose ownership must be transfered to the receiving end (thetransferargument inpostMessage). However most of the time, the request / response objects are usually made ofList,Map, and base types, all of which can cross thread boundaries "as-is". This behavior is now controlled by optional parametersinspectRequestandinspectResponseof methodsWorker.execute()andWorker.stream(), defaulting tofalsethus disabling message inspection. Passingtruewill activate message inspection for request and/or response and will be necessary when the message contains an object whose ownership must be transfered to the receiving end, typicaly aMessagePort. Basic testing found message transfer time improvement around ~5-10% for large payloads, e.g. aListcontaining manyMapitems (note that in Web scenarios, JSON serialization could prove a more efficient alternative). It should have little to no effect on smaller messages. Start requests will always be processed withinspectRequest = trueandinspectResponse = true. - Fixed issue with workers on native platforms: ensure all
ReceivePortsare closed uponIsolatetermination. - Support logging accross workers (which made
LocalSquadronLoggerobsolete). - Added support to reset the Squadron singleton.
- Reworked examples & unit tests.
3.4.0 #
- Rewritten streaming implementations (fix for https://github.com/d-markey/squadron/issues/8).
- Added unit tests.
3.3.2 #
- Implemented a
LocalLoggerto have Web workers log messages from the main window (effectively logging via Dart debugger if present). - Removed import of
dart:isolatefrom_worker_runner.dart. - Made
coveragea dev dependency. - Added a tool to extract coverage metrics during Github Dart workflow.
- Updates badges to include coverage metrics and platform info.
3.3.1 #
- Fixed streaming from
LocalWorker. - Added tests for
LocalWorker. - Improved cancellation handling.
- Added tests to improve test coverage.
3.3.0 #
- Implemented
LocalWorker, a worker-like class living in the same thread as its owner and available for inter-worker messaging. For instance, in a Flutter app, instantiating aLocalWorkerin the main thread enables other workers to (indirectly) call Flutter APIs that are otherwise not available in the context of a secondary thread. LocalWorkeruses the same concepts and approach asWorkers, such as theoperationsmap and theWorkerServiceinterface.
3.2.2 #
- Document types and release mode (special thanks to SwissCheese5).
- More error handling at communication points.
- Use lower log levels for internal Squadron log messages.
- Added test coverage.
3.2.1 #
- Document the new logging feature.
- Make
sendRequest()async in browserChannel(implementation closer to that of nativeChannel). - Add a timestamp to pool workers to record the time when it was assigned its last task.
- Sort pool workers to distribute tasks to those that have the largest capacity and the oldest timestamp.
- Add command property to
WorkerException. - Reorganized the test folder.
- Recompiled test Web workers.
3.2.0 #
- Added a logging mechanism to facilitate debugging Squadron's internals.
- Reworked connection flow between main program and worker.
- Reworked task scheduling.
- Fixed issue https://github.com/d-markey/squadron/issues/3.
- Added tests for logging and workers failing to initialize.
3.1.4 #
- Implemented cancellation token to enable worker task notification that cancellation has occured.
- Implemented
TimeOutToken,CancellableTokenandCompositeToken. - Updated
README.md. - Added unit tests.
3.1.0 #
- Several minor changes (some possibly breaking changes but easy to fix).
- Split library into
squadron_service.dart(worker services only),squadron_worker.dart(worker services and workers without pool) vs.squadron.dart(worker services, workers and pools). - Split
ChannelintoChannel(used to send aWorkerRequest) andWorkerChannel(used to send aWorkerResponse). - Added
ConcurrencySettingsto eventually replaceminWorkers,maxWorkersandmaxParallel. - Added
WorkerPool.execute()(will eventually replaceWorkerPool.compute()). - Added
WorkerPool.scheduleTask()to schedule aValueTask. Result will be accessible from futureValueTask.value. - Added
WorkerPool.scheduleStream()to schedule aStreamTask. Results will be accessible from streamStreamTask.stream. ValueTaskandStreamTaskprovide information on task execution (eg. status, wait time, execution time...).- Added
WorkerPool.cancel()to support worker task cancellation. - Updated
README.md. - Added unit tests.
3.0.0 #
- Split library into
squadron_service.dart(worker services only),squadron.dart(worker services and workers without pool) vs.squadron_pool.dart(worker services, workers and pools). - Moved
connect()andprocess()from Worker to WorkerService. - Provided the
run()function to facilitate implementation of platform workers. - Adapted tests and examples.
- Updated
README.md.
2.0.2 #
- Single test code base for both platforms.
- Added BitCoin service to test live network access from workers (courtesy of coindesk.com).
- Added PiDigits service (related to https://github.com/d-markey/squadron/issues/1).
- Retaining attempts based on manually operating a browser to run tests in /web (different test code base) and /test/browser-tests (same test code base).
2.0.1 #
- Remove dependency on js package.
2.0.0 #
- This version supports workers running in Isolates as well as Web Workers.
- Platform implementations are now more straightforward thanks to
Worker.connect()andWorker.process(). - See examples on how to scaffold services, Squadron Workers and platform workers.
- Added tests for Web Workers (run with
dart run build_runner serve -rand point your browser to http://localhost:8080/index.html).
1.0.2 #
- Added support for minimum count of workers in pool.
- Make sure Isolate is killed when the worker is stopped.
- Keep track of stats from stopped workers.
- Update tests & examples (proper error handling, command map, worker monitoring).
1.0.1 #
- Improve error handling.
- Improve documentation.
- Add unit tests.
1.0.0 #
- Initial version.