1
0
Fork 0
mirror of https://github.com/denoland/deno.git synced 2024-12-22 07:14:47 -05:00
denoland-deno/runtime/js
Nathan Whitaker e92a05b551
feat(serve): Opt-in parallelism for deno serve (#24920)
Adds a `parallel` flag to `deno serve`. When present, we spawn multiple
workers to parallelize serving requests.


```bash
deno serve --parallel main.ts
```

Currently on linux we use `SO_REUSEPORT` and rely on the fact that the
kernel will distribute connections in a round-robin manner.

On mac and windows, we sort of emulate this by cloning the underlying
file descriptor and passing a handle to each worker. The connections
will not be guaranteed to be fairly distributed (and in practice almost
certainly won't be), but the distribution is still spread enough to
provide a significant performance increase.

---
(Run on an Macbook Pro with an M3 Max, serving `deno.com`

baseline::
```
❯ wrk -d 30s -c 125 --latency http://127.0.0.1:8000
Running 30s test @ http://127.0.0.1:8000
  2 threads and 125 connections
  Thread Stats   Avg      Stdev     Max   +/- Stdev
    Latency   239.78ms   13.56ms 330.54ms   79.12%
    Req/Sec   258.58     35.56   360.00     70.64%
  Latency Distribution
     50%  236.72ms
     75%  248.46ms
     90%  256.84ms
     99%  268.23ms
  15458 requests in 30.02s, 2.47GB read
Requests/sec:    514.89
Transfer/sec:     84.33MB
```

this PR (`with --parallel` flag)
```
❯ wrk -d 30s -c 125 --latency http://127.0.0.1:8000
Running 30s test @ http://127.0.0.1:8000
  2 threads and 125 connections
  Thread Stats   Avg      Stdev     Max   +/- Stdev
    Latency   117.40ms  142.84ms 590.45ms   79.07%
    Req/Sec     1.33k   175.19     1.77k    69.00%
  Latency Distribution
     50%   22.34ms
     75%  223.67ms
     90%  357.32ms
     99%  460.50ms
  79636 requests in 30.07s, 12.74GB read
Requests/sec:   2647.96
Transfer/sec:    433.71MB
```
2024-08-14 22:26:21 +00:00
..
01_errors.js Reland "fix: CFunctionInfo and CTypeInfo leaks (#24634)" (#24692) 2024-07-24 02:11:38 +02:00
01_version.ts refactor: use core.ensureFastOps() (#21888) 2024-01-10 15:37:25 -07:00
06_util.js refactor: use web utils and lazy load utils from core (#22289) 2024-02-06 22:28:32 +01:00
10_permissions.js fix(runtime): use more null proto objects (#23921) 2024-05-23 00:03:35 +02:00
11_workers.js fix(runtime): use more null proto objects (#23921) 2024-05-23 00:03:35 +02:00
13_buffer.js chore: update references to deno_std to use JSR (#23239) 2024-04-10 17:26:35 -04:00
30_os.js fix: validate integer values in Deno.exitCode setter (#24068) 2024-06-02 21:29:01 -04:00
40_fs_events.js FUTURE(ext/fs): remove Deno.FsWatcher.prototype.rid (#23234) 2024-04-07 17:46:39 +10:00
40_process.js fix(runtime): use more null proto objects (#23921) 2024-05-23 00:03:35 +02:00
40_signals.js fix(runtime): use more null proto objects (#23921) 2024-05-23 00:03:35 +02:00
40_tty.js chore: upgrade deno_core (#22725) 2024-03-06 15:08:10 -08:00
41_prompt.js refactor: migrate extensions to virtual ops module (#22135) 2024-01-26 23:46:46 +01:00
90_deno_ns.js fix(cli): missing flag for --unstable-process (#24199) 2024-06-13 16:00:38 +03:00
98_global_scope_shared.js fix(runtime): use more null proto objects (#23921) 2024-05-23 00:03:35 +02:00
98_global_scope_window.js refactor: use web utils and lazy load utils from core (#22289) 2024-02-06 22:28:32 +01:00
98_global_scope_worker.js refactor: use web utils and lazy load utils from core (#22289) 2024-02-06 22:28:32 +01:00
99_main.js feat(serve): Opt-in parallelism for deno serve (#24920) 2024-08-14 22:26:21 +00:00
README.md chore: fix outdated note in runtime/js/README.md (#23673) 2024-05-05 01:30:53 +00:00

Runtime JavaScript Code

This directory contains Deno runtime code written in plain JavaScript.

Each file is an ES module and is prefixed with a number, telling in which order scripts should be loaded into V8 isolate.

Deno Web APIs

This directory facilities Web APIs that are available in Deno.

Please note, that some implementations might not be completely aligned with specification.

Some Web APIs are using ops under the hood, eg. console, performance.

Implemented Web APIs