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;
use std::io::{Read, Write};
use std::mem::MaybeUninit;
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)]
pub struct Meta {
......@@ -36,10 +41,6 @@ pub struct Config {
pub local_secret: String,
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>> {
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>> {
.iter()
.map(|c| Router::new(c, &mut sockets).map(|router| (c.remote_id, router)))
.collect::<Result<_, _>>()?;
let (mut router_readers, router_writers): (
HashMap<u8, RouterReader>,
HashMap<u8, RouterWriter>,
......@@ -73,7 +75,11 @@ fn main() -> Result<(), Box<dyn Error>> {
.collect();
println!("created tuns");
let num_threads = available_parallelism().unwrap_or(4).get(); // 根据系统的 CPU 线程数来调整
println!("Using {} threads", num_threads);
thread::scope(|s| {
// 为每个路由器读取数据分配线程
for router in router_readers.values_mut() {
s.spawn(|_| {
let mut buffer = [0u8; 1500 - 20]; // minus typical IP header space
......@@ -103,6 +109,7 @@ fn main() -> Result<(), Box<dyn Error>> {
});
}
// 为每个路由器写入数据分配线程
for (socket, mut router_writers) in router_writers3 {
s.spawn(move |_| {
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