Commit 41f4af85 authored by nanahira's avatar nanahira

again

parent 9f7e5412
Pipeline #37497 failed with stages
in 1 minute and 19 seconds
...@@ -8,6 +8,11 @@ use std::intrinsics::transmute; ...@@ -8,6 +8,11 @@ use std::intrinsics::transmute;
use std::io::{Read, Write}; use std::io::{Read, Write};
use std::mem::MaybeUninit; use std::mem::MaybeUninit;
use std::sync::Arc; use std::sync::Arc;
use crossbeam_utils::thread;
use grouping_by::GroupingBy;
use pnet::packet::ipv4::Ipv4Packet;
use socket2::Socket;
use std::thread::available_parallelism; // 引入可用线程数模块
#[repr(C)] #[repr(C)]
pub struct Meta { pub struct Meta {
...@@ -36,10 +41,6 @@ pub struct Config { ...@@ -36,10 +41,6 @@ pub struct Config {
pub local_secret: String, pub local_secret: String,
pub routers: Vec<ConfigRouter>, pub routers: Vec<ConfigRouter>,
} }
use crossbeam_utils::thread;
use grouping_by::GroupingBy;
use pnet::packet::ipv4::Ipv4Packet;
use socket2::Socket;
fn main() -> Result<(), Box<dyn Error>> { fn main() -> Result<(), Box<dyn Error>> {
let config: Config = serde_json::from_str(env::args().nth(1).ok_or("need param")?.as_str())?; let config: Config = serde_json::from_str(env::args().nth(1).ok_or("need param")?.as_str())?;
...@@ -50,6 +51,7 @@ fn main() -> Result<(), Box<dyn Error>> { ...@@ -50,6 +51,7 @@ fn main() -> Result<(), Box<dyn Error>> {
.iter() .iter()
.map(|c| Router::new(c, &mut sockets).map(|router| (c.remote_id, router))) .map(|c| Router::new(c, &mut sockets).map(|router| (c.remote_id, router)))
.collect::<Result<_, _>>()?; .collect::<Result<_, _>>()?;
let (mut router_readers, router_writers): ( let (mut router_readers, router_writers): (
HashMap<u8, RouterReader>, HashMap<u8, RouterReader>,
HashMap<u8, RouterWriter>, HashMap<u8, RouterWriter>,
...@@ -73,7 +75,11 @@ fn main() -> Result<(), Box<dyn Error>> { ...@@ -73,7 +75,11 @@ fn main() -> Result<(), Box<dyn Error>> {
.collect(); .collect();
println!("created tuns"); println!("created tuns");
let num_threads = available_parallelism().unwrap_or(4).get(); // 根据系统的 CPU 线程数来调整
println!("Using {} threads", num_threads);
thread::scope(|s| { thread::scope(|s| {
// 为每个路由器读取数据分配线程
for router in router_readers.values_mut() { for router in router_readers.values_mut() {
s.spawn(|_| { s.spawn(|_| {
let mut buffer = [0u8; 1500 - 20]; // minus typical IP header space let mut buffer = [0u8; 1500 - 20]; // minus typical IP header space
...@@ -103,6 +109,7 @@ fn main() -> Result<(), Box<dyn Error>> { ...@@ -103,6 +109,7 @@ fn main() -> Result<(), Box<dyn Error>> {
}); });
} }
// 为每个路由器写入数据分配线程
for (socket, mut router_writers) in router_writers3 { for (socket, mut router_writers) in router_writers3 {
s.spawn(move |_| { s.spawn(move |_| {
let mut recv_buf = [MaybeUninit::uninit(); 1500]; let mut recv_buf = [MaybeUninit::uninit(); 1500];
......
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment