Skip to content

Commit 3d218b5

Browse files
authored
feat: Merge pull request #244 from nyannyacha/perf-use-green-thread
feat: use the tokio task instead of the native thread to poll each isolate
2 parents a6bd18a + c531f86 commit 3d218b5

Some content is hidden

Large Commits have some content hidden by default. Use the searchbox below for content that may be hidden.

45 files changed

+2467
-597
lines changed

Cargo.lock

Lines changed: 85 additions & 2 deletions
Some generated files are not rendered by default. Learn more about customizing how changed files appear on GitHub.

Cargo.toml

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -42,6 +42,7 @@ deno_webidl = { version = "0.121.0" }
4242
deno_web = { version = "0.152.0" }
4343
deno_websocket = { version = "0.126.0" }
4444
deno_webstorage = { version = "0.116.0" }
45+
enum-as-inner = "0.6.0"
4546
serde = { version = "1.0.149", features = ["derive"] }
4647
hyper = "0.14.26"
4748
tokio = { version = "1.28.1", features = ["full"] }
@@ -66,6 +67,7 @@ import_map = { version = "0.15.0" }
6667
base64 = { version = "=0.13.1" }
6768
futures = { version = "0.3.28" }
6869
futures-util = { version = "0.3.28" }
70+
ctor = { version = "0.2.6" }
6971

7072
[profile.release]
7173
lto = true

crates/base/Cargo.toml

Lines changed: 6 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -38,7 +38,7 @@ log = { workspace = true }
3838
reqwest.workspace = true
3939
serde = { version = "1.0.149", features = ["derive"] }
4040
tokio = { workspace = true }
41-
tokio-util = { workspace = true }
41+
tokio-util = { workspace = true, features = ["rt"] }
4242
futures-util = { workspace = true }
4343
url = { version = "2.3.1" }
4444
event_worker ={ version = "0.1.0", path = "../event_worker" }
@@ -55,11 +55,15 @@ sb_node = { version = "0.1.0", path = "../node" }
5555
eszip.workspace = true
5656
notify = { version = "6.1.1", default-features = false, features = ["macos_kqueue"] }
5757
flume = { version = "0.11.0" }
58-
strum = { version = "0.25.0", features = ["derive"] }
58+
enum-as-inner.workspace = true
5959
urlencoding.workspace = true
60+
scopeguard = { version = "1.2.0" }
61+
pin-project = { version = "1.1.3" }
62+
ctor = { workspace = true }
6063

6164
[dev-dependencies]
6265
flaky_test = { version = "0.1.0", path = "../flaky_test" }
66+
serial_test = { version = "3.0.0" }
6367

6468
[build-dependencies]
6569
sb_core = { version = "0.1.0", path = "../sb_core" }

crates/base/src/commands.rs

Lines changed: 6 additions & 31 deletions
Original file line numberDiff line numberDiff line change
@@ -1,10 +1,8 @@
11
use crate::{
2-
rt_worker::worker_pool::WorkerPoolPolicy,
3-
server::{Server, ServerCodes, WorkerEntrypoints},
2+
rt_worker::{worker_ctx::TerminationToken, worker_pool::WorkerPoolPolicy},
3+
server::{Server, ServerHealth, WorkerEntrypoints},
44
};
55
use anyhow::Error;
6-
use deno_core::JsRuntime;
7-
use log::error;
86
use tokio::sync::mpsc::Sender;
97

108
#[allow(clippy::too_many_arguments)]
@@ -16,17 +14,10 @@ pub async fn start_server(
1614
user_worker_policy: Option<WorkerPoolPolicy>,
1715
import_map_path: Option<String>,
1816
no_module_cache: bool,
19-
no_signal_handler: bool,
20-
callback_tx: Option<Sender<ServerCodes>>,
17+
callback_tx: Option<Sender<ServerHealth>>,
2118
entrypoints: WorkerEntrypoints,
19+
termination_token: Option<TerminationToken>,
2220
) -> Result<(), Error> {
23-
set_v8_flags();
24-
25-
// NOTE(denoland/deno/20495): Due to the new PKU (Memory Protection Keys)
26-
// feature introduced in V8 11.6, We need to initialize the V8 platform on
27-
// the main thread that spawns V8 isolates.
28-
JsRuntime::init_platform(None);
29-
3021
let mut server = Server::new(
3122
ip,
3223
port,
@@ -35,27 +26,11 @@ pub async fn start_server(
3526
user_worker_policy,
3627
import_map_path,
3728
no_module_cache,
38-
no_signal_handler,
3929
callback_tx,
4030
entrypoints,
31+
termination_token,
4132
)
4233
.await?;
43-
server.listen().await
44-
}
45-
46-
fn set_v8_flags() {
47-
let v8_flags = std::env::var("V8_FLAGS").unwrap_or("".to_string());
48-
let mut vec = vec![""];
4934

50-
if v8_flags.is_empty() {
51-
return;
52-
}
53-
54-
vec.append(&mut v8_flags.split(' ').collect());
55-
56-
let ignored = deno_core::v8_set_flags(vec.iter().map(|v| v.to_string()).collect());
57-
58-
if *ignored.as_slice() != [""] {
59-
error!("v8 flags unrecognized {:?}", ignored);
60-
}
35+
server.listen().await
6136
}

0 commit comments

Comments
 (0)