2014-09-08 3 views
1

Pour utiliser le modèle de filetage M:N dans Rust, j'ouvre une piscine et commence les tâches de frai comme d'habitude. The Green Documentation donne l'exemple suivant:Gestion des fils verts

#![feature(phase)] 
#[phase(plugin)] extern crate green; 

green_start!(main) 

fn main() { 
    // Running inside a green pool 

    // Spawn more green threads? 
    for x in some_thing.iter() { 
     spawn(proc() { 
      some_task() 
     }); 
    } 
} 

Si vous vouliez ajouter dynamiquement un autre thread OS, on pourrait faire quelque chose comme ceci:

extern crate green; 
extern crate rustuv; 

use std::task::TaskBuilder; 
use green::{SchedPool, PoolConfig, GreenTaskBuilder}; 

let mut config = PoolConfig::new(); 

// Optional: Set the event loop to be rustuv's to allow I/O to work 
config.event_loop_factory = rustuv::event_loop; 

let mut pool = SchedPool::new(config); 

// Spawn tasks into the pool of schedulers 
TaskBuilder::new().green(&mut pool).spawn(proc() { 
    // this code is running inside the pool of schedulers 

    spawn(proc() { 
     // this code is also running inside the same scheduler pool 
    }); 
}); 

// Dynamically add a new scheduler to the scheduler pool. This adds another 
// OS thread that green threads can be multiplexed on to. 
let mut handle = pool.spawn_sched(); 

// Pin a task to the spawned scheduler 
TaskBuilder::new().green_pinned(&mut pool, &mut handle).spawn(proc() { 
    /* ... */ 
}); 

// Handles keep schedulers alive, so be sure to drop all handles before 
// destroying the sched pool 
drop(handle); 

// Required to shut down this scheduler pool. 
// The task will fail if `shutdown` is not called. 
pool.shutdown(); 

Est-il possible de dire utiliser x num de threads OS, ou doivent-ils être créés et gérés dans le code?

Répondre

1

Selon la documentation de PoolConfig, le nombre de threads OS peut être spécifié lors de la création d'une nouvelle piscine:

let mut config = PoolConfig::new(); 
config.threads = 42u; 
let mut pool = SchedPool::new(config); 
// use your pool with 42 OS threads as you want 

La valeur par défaut de config.threads est donnée par std::rt::default_sched_threads()