1
0
Fork 0
mirror of https://github.com/denoland/deno.git synced 2025-01-10 16:11:13 -05:00
denoland-deno/core
Bert Belder 7807afa972
core: make Isolate use FuturesUnordered to track ops
Additionally, instead of polling ops in a loop until none of them are
ready, the isolate will now yield to the task system after delivering
the first batch of completed ops to the javascript side.

Although this makes performance a bit worse (about 15% fewer
requests/second on the 'deno_core_http_bench' benchmark), we feel that
the advantages are worth it:

* It resolves the extremely high worst-case latency that we were seeing
  on deno_core_http_bench, in particular when using the multi-threaded
  Tokio runtime, which would sometimes exceed a full second.

* Before this patch, the implementation of Isolate::poll() had to loop
  through all sub-futures and poll each one of them, which doesn't scale
  well as the number of futures managed by the isolate goes up. This
  could lead to poor performance when e.g. a server is servicing
  thousands of connected clients.
2019-04-16 22:54:33 +02:00
..
libdeno core: snapshot improvements (#2052) 2019-04-08 10:12:43 -04:00
BUILD.gn Rename crate deno_core to deno (#2022) 2019-03-30 19:30:40 -04:00
build.rs Publish rust crate on crates.io (#2024) 2019-03-31 17:22:02 -04:00
Cargo.toml third_party: upgrade rust crates 2019-04-15 18:56:29 +02:00
core.d.ts namespace reorg: libdeno and DenoCore to Deno.core (#1998) 2019-03-26 08:22:07 -04:00
flags.rs core: Abstract out Behavior from Isolate (#1904) 2019-03-11 17:57:36 -04:00
http_bench.js namespace reorg: libdeno and DenoCore to Deno.core (#1998) 2019-03-26 08:22:07 -04:00
http_bench.rs core/http_bench: support -D flag to enable logging 2019-04-16 22:25:57 +02:00
isolate.rs core: make Isolate use FuturesUnordered to track ops 2019-04-16 22:54:33 +02:00
js_errors.rs Non-fatal compile_sync failures (#2039) 2019-04-04 05:33:32 -04:00
lib.rs Add deno_core::RecursiveLoad for async module loading (#2034) 2019-04-02 20:10:08 +02:00
libdeno.rs core: snapshot improvements (#2052) 2019-04-08 10:12:43 -04:00
modules.rs Implement async module loading in CLI (#2084) 2019-04-16 15:13:42 -04:00
README.md core: Rename Behavior to Dispatch (#2082) 2019-04-09 13:11:25 -04:00
shared_queue.js namespace reorg: libdeno and DenoCore to Deno.core (#1998) 2019-03-26 08:22:07 -04:00
shared_queue.rs Clippy fixes 2019-04-02 18:04:25 +02:00
shared_queue_test.js namespace reorg: libdeno and DenoCore to Deno.core (#1998) 2019-03-26 08:22:07 -04:00

Deno Core

This Rust crate contains the essential V8 bindings for Deno's command-line interface (Deno CLI). The main abstraction here is the Isolate which proivdes a way to execute JavaScript. The Isolate is modeled as a Future<Item=(), Error=JSError> which completes once all of its ops have completed. The user must define what an Op is by implementing the Dispatch trait, and by doing so define any "built-in" functionality that would be provided by the VM. Ops are triggered by Deno.core.dispatch().

Documentation for this crate is thin at the moment. Please see http_bench.rs as a simple example of usage.

TypeScript support and a lot of other functionality is not available at this layer. See the cli for that.