Ecosyste.ms: Awesome
An open API service indexing awesome lists of open source software.
https://github.com/zonyitoo/simplesched
The most naive Coroutine scheduler in Rust
https://github.com/zonyitoo/simplesched
Last synced: 2 months ago
JSON representation
The most naive Coroutine scheduler in Rust
- Host: GitHub
- URL: https://github.com/zonyitoo/simplesched
- Owner: zonyitoo
- Created: 2015-06-16T15:38:24.000Z (over 9 years ago)
- Default Branch: master
- Last Pushed: 2016-01-11T03:21:38.000Z (about 9 years ago)
- Last Synced: 2024-10-29T20:11:59.487Z (2 months ago)
- Language: Rust
- Size: 219 KB
- Stars: 34
- Watchers: 3
- Forks: 4
- Open Issues: 3
-
Metadata Files:
- Readme: README.md
Awesome Lists containing this project
README
# Simple Sched
The most naive scheduler for Coroutines in Rust.
[![Build Status](https://img.shields.io/travis/zonyitoo/simplesched.svg)](https://travis-ci.org/zonyitoo/simplesched)
[![Crates.io]( https://img.shields.io/crates/l/simplesched.svg)]( https://crates.io/crates/simplesched)
[![Crates.io]( https://img.shields.io/crates/v/simplesched.svg)](https://crates.io/crates/simplesched)## Usage
```toml
[dependencies]
simplesched = "*"
```### Basic
```rust
extern crate simplesched;use simplesched::Scheduler;
fn main() {
Scheduler::spawn(|| {
for _ in 0..10 {
println!("Heil Hydra");
}
});Scheduler::run(1);
}
```### TCP Echo Server
```rust
extern crate simplesched;use std::io::{Read, Write};
use simplesched::net::TcpListener;
use simplesched::Scheduler;fn main() {
// Spawn a coroutine for accepting new connections
Scheduler::spawn(move|| {
let acceptor = TcpListener::bind("127.0.0.1:8080").unwrap();
println!("Waiting for connection ...");for stream in acceptor.incoming() {
let mut stream = stream.unwrap();println!("Got connection from {:?}", stream.peer_addr().unwrap());
// Spawn a new coroutine to handle the connection
Scheduler::spawn(move|| {
let mut buf = [0; 1024];loop {
match stream.read(&mut buf) {
Ok(0) => {
println!("EOF");
break;
},
Ok(len) => {
println!("Read {} bytes, echo back", len);
stream.write_all(&buf[0..len]).unwrap();
},
Err(err) => {
println!("Error occurs: {:?}", err);
break;
}
}
}println!("Client closed");
});
}
});// Schedule with 4 threads
Scheduler::run(4);
}
```More examples could be found in `examples`.
## Basic Benchmark
### Test environment
* OS X 10.10.5 Beta
* MacBook Pro Late 2013
* 2.4GHz Intel Core i5
* 8 GB 1600 MHz DDR3Release build. Run the `examples/http-echo-server.rs` with 4 threads, test it with `wrk`:
```
$ wrk -c 400 -t 2 http://127.0.0.1:8000/
Running 10s test @ http://127.0.0.1:8000/
2 threads and 400 connections
Thread Stats Avg Stdev Max +/- Stdev
Latency 7.07ms 4.58ms 78.12ms 83.27%
Req/Sec 29.07k 3.80k 39.00k 76.00%
578941 requests in 10.04s, 51.90MB read
Socket errors: connect 0, read 101, write 0, timeout 0
Requests/sec: 57667.33
Transfer/sec: 5.17MB
```Go 1.4.2 example HTTP echo server, with `GOMAXPROCS=4`:
```
$ wrk -c 400 -t 2 http://127.0.0.1:8000/
Running 10s test @ http://127.0.0.1:8000/
2 threads and 400 connections
Thread Stats Avg Stdev Max +/- Stdev
Latency 6.01ms 3.68ms 96.42ms 84.52%
Req/Sec 29.32k 6.53k 51.77k 71.21%
583573 requests in 10.05s, 75.13MB read
Socket errors: connect 0, read 35, write 0, timeout 0
Requests/sec: 58084.36
Transfer/sec: 7.48MB
```