prokio

An asynchronous runtime compatible with WebAssembly and non-WebAssembly targets.

Latest version: 0.1.0 registry icon
Maintenance score
0
Safety score
0
Popularity score
70
Check your open source dependency risks. Get immediate insight about security, stability and licensing risks.
Security
  Vulnerabilities
Version Suggest Low Medium High Critical
0.1.0 0 0 0 0 0

Stability
Latest release:

0.1.0 - This version may not be safe as it has not been updated for a long time. Find out if your coding project uses this component and get notified of any reported security vulnerabilities with Meterian-X Open Source Security Platform

Licensing

Maintain your licence declarations and avoid unwanted licences to protect your IP the way you intended.

MIT   -   MIT License

Not a wildcard

Not proprietary

OSI Compliant


Apache-2.0   -   Apache License 2.0

Not a wildcard

Not proprietary

OSI Compliant



Promise x Tokio = Prokio

An asynchronous runtime compatible with WebAssembly and non-WebAssembly targets.

Rationale

When designing components and libraries that works on both WebAssembly targets backed by JavaScript Runtime and non-WebAssembly targets with Native Runtimes. Developers usually face challenges that requires applying multiple feature flags throughout their application:

  1. Select I/O and timers that works with the target runtime.
  2. Native Runtimes usually require Send futures and WebAssembly types are usually !Send.

Implementation

To alleviate these issues, Prokio implements a single-threaded runtime that executes ?Send (Send or !Send) futures.

On platforms with multi-threading support, prokio spawns multiple independent runtimes proportional to the CPU core number. When tasks are spawned with a runtime handle, it will randomly select a worker thread from the internal pool. All tasks spawned with spawn_local will run on the same thread as the thread the task was running. When the runtime runs in a WebAssembly target, all tasks will be scheduled on the main thread.

This runtime is designed in favour of IO-bounded workload with similar runtime cost. When running I/O workloads, it would produce a slightly better performance as tasks are never moved to another thread. However, If a worker thread is busy, other threads will not be able to steal tasks scheduled on the busy thread. When you have a CPU-bounded task where CPU time is significantly more expensive, it should be spawned with a dedicated thread (or Web Worker) and communicates with the application using channels.

Prokio provides the following components:

  1. A Task Scheduler that is capable of running non-Send tasks.
  2. A Timer that is compatible with the scheduler backend.
  3. Task Synchronisation Mechanisms.

Runtime Backend

Prokio runtime is implemented with different runtimes depending on the target platform and can use all features (timers / IO / task synchronisation) from the selected native runtime:

  • wasm-bindgen-futures (WebAssembly targets)
  • tokio (non-WebAssembly targets)