Sfoglia il codice sorgente

bin/ircd: run four executor threads

ghassmo 4 anni fa
parent
commit
77a52ea0fe
3 ha cambiato i file con 28 aggiunte e 6 eliminazioni
  1. 1 0
      Cargo.lock
  2. 1 0
      bin/ircd/Cargo.toml
  3. 26 6
      bin/ircd/src/main.rs

+ 1 - 0
Cargo.lock

@@ -2653,6 +2653,7 @@ dependencies = [
  "async-trait",
  "clap 3.0.7",
  "darkfi",
+ "easy-parallel",
  "futures",
  "log",
  "rand 0.8.5",

+ 1 - 0
bin/ircd/Cargo.toml

@@ -15,6 +15,7 @@ async-std = "1.10.0"
 async-trait = "0.1.52"
 async-channel = "1.6.1"
 async-executor = "1.4.1"
+easy-parallel = "3.2.0"
 
 # Crypto
 rand = "0.8.4"

+ 26 - 6
bin/ircd/src/main.rs

@@ -1,16 +1,18 @@
+use async_std::io::BufReader;
+use std::{
+    net::{SocketAddr, TcpListener, TcpStream},
+    sync::Arc,
+};
+
 extern crate clap;
 use async_executor::Executor;
-use async_std::io::BufReader;
 use async_trait::async_trait;
+use easy_parallel::Parallel;
 use futures::{AsyncBufReadExt, AsyncReadExt, FutureExt};
 use log::{debug, error, info, warn};
 use serde_json::{json, Value};
 use simplelog::{ColorChoice, TermLogger, TerminalMode};
 use smol::Async;
-use std::{
-    net::{SocketAddr, TcpListener, TcpStream},
-    sync::Arc,
-};
 
 use darkfi::{
     net,
@@ -236,5 +238,23 @@ fn main() -> Result<()> {
     TermLogger::init(lvl, cfg, TerminalMode::Mixed, ColorChoice::Auto)?;
 
     let ex = Arc::new(Executor::new());
-    smol::block_on(ex.run(start(ex.clone(), options)))
+    let (signal, shutdown) = async_channel::unbounded::<()>();
+
+    let ex2 = ex.clone();
+
+    // let nthreads = num_cpus::get();
+    // debug!(target: "IRC DAEMON", "Run {} executor threads", nthreads);
+
+    let (_, result) = Parallel::new()
+        .each(0..4, |_| smol::future::block_on(ex.run(shutdown.recv())))
+        // Run the main future on the current thread.
+        .finish(|| {
+            smol::future::block_on(async move {
+                start(ex2.clone(), options).await?;
+                drop(signal);
+                Ok::<(), darkfi::Error>(())
+            })
+        });
+
+    result
 }