1
+ use rayon:: prelude:: * ;
2
+
3
+ pub fn rayon_par_iter ( ) {
4
+ let v = vec ! [ 1 , 2 , 3 , 4 , 5 , 6 , 7 , 8 , 9 , 10 ] ;
5
+ let sum = v. par_iter ( ) . map ( |x| x * x) . sum :: < i32 > ( ) ;
6
+ println ! ( "sum: {}" , sum) ;
7
+
8
+ let mut left = vec ! [ 42 ; 10 ] ;
9
+ let mut right = vec ! [ -1 ; 10 ] ;
10
+
11
+ ( 10 ..15 )
12
+ . into_par_iter ( )
13
+ . enumerate ( )
14
+ . unzip_into_vecs ( & mut left, & mut right) ;
15
+
16
+ assert_eq ! ( left, [ 0 , 1 , 2 , 3 , 4 ] ) ;
17
+ assert_eq ! ( right, [ 10 , 11 , 12 , 13 , 14 ] ) ;
18
+ }
19
+
20
+ pub fn rayon_scope_example ( ) {
21
+ rayon:: scope ( |s| {
22
+ s. spawn ( |_| {
23
+ println ! ( "Hello from a thread!" ) ;
24
+ } ) ;
25
+ } ) ;
26
+ }
27
+
28
+ pub fn rayon_scope_example2 ( ) {
29
+ let mut value_a = None ;
30
+ let mut value_b = None ;
31
+ let mut value_c = None ;
32
+ rayon:: scope ( |s| {
33
+ s. spawn ( |s1| {
34
+ value_a = Some ( 22 ) ;
35
+
36
+ s1. spawn ( |_| {
37
+ value_b = Some ( 44 ) ;
38
+ } ) ;
39
+ } ) ;
40
+
41
+ s. spawn ( |_| {
42
+ value_c = Some ( 66 ) ;
43
+ } ) ;
44
+ } ) ;
45
+ assert_eq ! ( value_a, Some ( 22 ) ) ;
46
+ assert_eq ! ( value_b, Some ( 44 ) ) ;
47
+ assert_eq ! ( value_c, Some ( 66 ) ) ;
48
+ }
49
+
50
+
51
+ pub fn rayon_scopefifo_example ( ) {
52
+ rayon:: scope_fifo ( |s| {
53
+ s. spawn_fifo ( |s| { // task s.1
54
+ println ! ( "s.1" ) ;
55
+ s. spawn_fifo ( |_s| { // task s.1.1
56
+ println ! ( "s.1.1" ) ;
57
+ rayon:: scope_fifo ( |t| {
58
+ t. spawn_fifo ( |_| println ! ( "t.1" ) ) ; // task t.1
59
+ t. spawn_fifo ( |_| println ! ( "t.2" ) ) ; // task t.2
60
+ } ) ;
61
+ } ) ;
62
+ } ) ;
63
+ s. spawn_fifo ( |_s| { // task s.2
64
+ println ! ( "s.2" ) ;
65
+ } ) ;
66
+ // point mid
67
+ } ) ;
68
+ }
69
+
70
+ pub fn rayon_threadpool_example ( ) {
71
+ fn fib ( n : usize ) -> usize {
72
+ if n == 0 || n == 1 {
73
+ return n;
74
+ }
75
+ let ( a, b) = rayon:: join ( || fib ( n - 1 ) , || fib ( n - 2 ) ) ; // runs inside of `pool`
76
+ return a + b;
77
+ }
78
+
79
+ let pool = rayon:: ThreadPoolBuilder :: new ( )
80
+ . num_threads ( 4 )
81
+ . build ( )
82
+ . unwrap ( ) ;
83
+
84
+ let n = pool. install ( || fib ( 20 ) ) ;
85
+
86
+ println ! ( "{}" , n) ;
87
+ }
0 commit comments