45 lines
1.3 KiB
Markdown
45 lines
1.3 KiB
Markdown
Rust wrapper for Apple's Grand Central Dispatch (GCD).
|
|
|
|
GCD is an implementation of task parallelism that allows tasks to be submitted
|
|
to queues where they are scheduled to execute.
|
|
|
|
For more information, see Apple's [Grand Central Dispatch reference](
|
|
https://developer.apple.com/library/mac/documentation/Performance/Reference/GCD_libdispatch_Ref/index.html).
|
|
|
|
* Documentation: http://ssheldon.github.io/rust-objc/dispatch/
|
|
* Crate: https://crates.io/crates/dispatch
|
|
|
|
# Serial Queues
|
|
|
|
Serial queues execute tasks serially in FIFO order. The application's main
|
|
queue is serial and can be accessed through the `Queue::main` function.
|
|
|
|
``` rust
|
|
use dispatch::{Queue, QueueAttribute};
|
|
|
|
let queue = Queue::create("com.example.rust", QueueAttribute::Serial);
|
|
queue.async(|| println!("Hello"));
|
|
queue.async(|| println!("World"));
|
|
```
|
|
|
|
# Concurrent Queues
|
|
|
|
Concurrent dispatch queues execute tasks concurrently. GCD provides global
|
|
concurrent queues that can be accessed through the `Queue::global` function.
|
|
|
|
`Queue` has two methods that can simplify processing data in parallel, `foreach`
|
|
and `map`:
|
|
|
|
``` rust
|
|
use dispatch::{Queue, QueuePriority};
|
|
|
|
let queue = Queue::global(QueuePriority::Default);
|
|
|
|
let mut nums = vec![1, 2];
|
|
queue.foreach(&mut nums, |x| *x += 1);
|
|
assert!(nums == [2, 3]);
|
|
|
|
let nums = queue.map(nums, |x| x.to_string());
|
|
assert!(nums[0] == "2");
|
|
```
|