【Rust日报】 2019-09-03
Rocket和Actix-Web的异步性能测试
Rust目前最火的两个web框架就是Actix-Web和Rocket, 众所周知,Rocket的优势在于易用性,Actix-web在于性能,最近,Rocket的人员正在迁移到异步后端。因此,作者想看看异步分支和主分支如何的性能如何同时和Actix-Web进行比较是很有趣的。
测试使用的项目
用Rocket编写的hello world应用程序
#![feature(proc_macro_hygiene, decl_macro)]
#[macro_use] extern crate rocket;
#[get("/")]
fn index() -> String {
"Hello, world!".to_string()
}
fn main() {
rocket::ignite().mount("/", routes![index]).launch();
}
Cargo.toml的差异(同步和异步)
[dependencies]
rocket = { git = "https://github.com/SergioBenitez/Rocket.git", branch = "async" }
同步
[dependencies]
rocket = { git = "https://github.com/SergioBenitez/Rocket.git", branch = "master" }
下面的程序用于测试Actix-Web
use actix_web::{web, App, HttpServer, Responder};
fn index() -> impl Responder {
"Hello, World".to_string()
}
fn main() -> std::io::Result<()> {
HttpServer::new(|| App::new().service(web::resource("/").to(index)))
.bind("127.0.0.1:8000")?
.run()
}
我还引入了Wrap
use warp::{self, path, Filter};
fn main() {
let hello = path!("hello")
.map(|| "Hello, world!");
warp::serve(hello)
.run(([127, 0, 0, 1], 8000));
}
结果
我运行了二个应用程序使用了 cargo run --release 并用了wrk -t20 -c1000 -d30s http://localhost:8000
Rocket 同步
Running 30s test @ http://localhost:8000
20 threads and 1000 connections
Thread Stats Avg Stdev Max +/- Stdev
Latency 7.14ms 61.41ms 1.66s 97.97%
Req/Sec 5.15k 1.45k 14.87k 74.03%
3076813 requests in 30.10s, 428.40MB read
Requests/sec: 102230.30
Transfer/sec: 14.23MB
Rocket 异步
Running 30s test @ http://localhost:8000
20 threads and 1000 connections
Thread Stats Avg Stdev Max +/- Stdev
Latency 4.34ms 3.06ms 211.14ms 79.00%
Req/Sec 11.15k 1.81k 34.11k 79.08%
6669116 requests in 30.10s, 0.91GB read
Requests/sec: 221568.27
Transfer/sec: 31.06MB
Actix-Web
Running 30s test @ http://localhost:8000
20 threads and 1000 connections
Thread Stats Avg Stdev Max +/- Stdev
Latency 3.82ms 5.58ms 249.57ms 86.55%
Req/Sec 24.09k 5.27k 69.99k 72.52%
14385279 requests in 30.10s, 1.71GB read
Requests/sec: 477955.05
Transfer/sec: 58.34MB
Warp
20 threads and 1000 connections
Thread Stats Avg Stdev Max +/- Stdev
Latency 4.23ms 8.50ms 428.96ms 93.33%
Req/Sec 20.38k 6.09k 76.63k 74.57%
12156483 requests in 30.10s, 1.47GB read
Requests/sec: 403896.10
Transfer/sec: 50.07MB
结论
虽然async Rocket的性能仍然不如Actix-Web,但是async极大地提高了它的性能。
我非常希望看到Rocket的性能提高到这样的程度:作为一名开发人员,从此就不需要在易用性和性能之间做出选择。
rustversion - 根据rustc编译器版本进行条件编译
这个类库提供了宏的扩展,能够根据rustc编译器版本进行条件编译的宏。
使用案例
#[rustversion::since(1.33)]
use std::pin::Pin;
#[rustversion::since(1.33)]
impl<P: MyTrait> MyTrait for Pin<P> {
/* ... */
}
#[rustversion::attr(before(1.33), repr(packed))]
#[rustversion::attr(since(1.33), repr(packed(2)))]
struct Six(i16, i32);
fn main() {
println!("{}", std::mem::align_of::<Six>());
}
更多信息可以前往GitHub了解一哈
mobi-rs - 用于解析和操作.mobi格式的Rust库
一个用rust编写的从.mobi格式电子书中提取数据的库
使用案例
访问基本信息
use mobi::Mobi;
fn main() {
let m = Mobi::init(Path::new("/home/wojtek/Downloads/lotr.mobi")).unwrap();
let title = m.title().unwrap();
let author = m.author().unwrap();
let publisher = m.publisher().unwrap();
let desc = m.description().unwrap();
let isbn = m.isbn().unwrap();
let pub_date = m.publish_date().unwrap();
let contributor = m.contributor().unwrap();
println!("{}\n{}\n{}\n{}\n{}\n{}\n{}\n", title, author, publisher, isbn, pub_date, desc, contributor);
// Access Headers
let header = m.header; // Normal Header
let pdheader = m.palmdoc; // PalmDOC Header
let mheader = m.mobi; // MOBI Header
let exth = m.exth // Extra Header
}
输出
The Fellowship of the Ring
J. R. R. Tolkien
Houghton Mifflin
9780618574940
2005-07-15T07:00:00+00:00
SUMMARY: For over fifty years, J.R.R.............
calibre (0.7.23) [http://calibre-ebook.com]
更多信息可以前往GitHub了解一哈
persy - 用Rust编写的简单事务性存储引擎
Persy是一个用rust编写的事务性存储引擎。
示例
use persy::{Persy,Config};
//...
Persy::create("./open.persy")?;
let persy = Persy::open("./open.persy",Config::new())?;
let mut tx = persy.begin()?;
persy.create_segment(&mut tx, "seg")?;
let data = vec![1;20];
persy.insert_record(&mut tx, "seg", &data)?;
let prepared = persy.prepare_commit(tx)?;
persy.commit(prepared)?;
for (_id, content) in persy.scan("seg")? {
assert_eq!(content[0], 20);
//....
}
更多信息可以前往GitLab了解一哈
From 日报小组 月泉
日报订阅地址:
独立日报订阅地址:
社区学习交流平台订阅:
Leave 【Rust日报】 2019-09-03 to:
Read more #rust posts
Best Posts From ChaosBot
We have not curated any of blackanger's posts yet. But you can encourage our curation team to review posts by visiting them regularly and by referring other readers. Because we give priority to frequently read content.
More Posts From ChaosBot
- 【Rust日报】 2019-09-06
- 【Rust日报】 2019-09-05
- 【Rust日报】2019-09-04
- 【Rust日报】 2019-09-03
- 【Rust日报】 2019-09-01
- 【Rust日报】 2019-08-30
- 【Rust日报】 2019-08-29
- 【Rust日报】 2019-08-28
- 【Rust日报】 2019-08-27
- 【Rust日报】2019-08-26
- 【Rust日报】 2019-08-25
- 【Rust日报】 2019-08-24
- 【Rust日报】 2019-08-23
- 【Rust日报】 2019-08-22
- 【Rust日报】 2019-08-21
- 【Rust日报】2019-08-20
- 【Rust日报】2019-08-19
- 【Rust日报】2019-08-18
- 【Rust日报】 2019-08-17
- 【Rust日报】 2019-08-16