|
1 | 1 | # Dagrs |
2 | 2 |
|
3 | | -`dagrs` are suitable for the execution of multiple tasks with graph-like dependencies. `dagrs` has the characteristics of high performance and asynchronous execution. It provides users with a convenient programming interface. |
| 3 | +Welcome to **Dagrs**! Dagrs is an easy-to-use, high-performance asynchronous task programming framework written in Rust. |
| 4 | +Dagrs follows the concept of Flow based Programming, and aims to provide users with convenient programming interface. |
4 | 5 |
|
5 | | -The development of `dagrs` follows the concept of Flow-based Programming. |
| 6 | +[Website](https://dagrs.com/) | [Guides](https://dagrs.com/docs/getting-started/introduction) | [Chat](https://discord.gg/4JzaNkRP) |
6 | 7 |
|
7 | | -## Flow-based Programming |
| 8 | +## Project Overview |
8 | 9 |
|
9 | | -Flow-based Programming (FBP) was invented by J. Paul Morrison in the early 1970s. It was initially implemented in software for a Canadian bank. Over the years, it’s had various names but has always maintained its core principles of reducing development time and managing processes efficiently. |
| 10 | +### Dagrs's role in your project |
10 | 11 |
|
11 | | -FBP treats applications as networks of 'black box' processes that communicate by sending and receiving data, referred to as Information Packets, over predefined connections. It’s a component-oriented approach that fits well with modular software architecture. |
| 12 | +When you orchestrate multitasking applications asynchronously, you can make them scale better by reducing the cost of performing multiple operations simultaneously. |
| 13 | +However, writing correct asynchronous code and managing communication between different tasks is annoying. |
| 14 | +Dagrs provides convenient task abstraction and asynchronous running & communication mechanisms to reduce development costs. |
12 | 15 |
|
13 | | -FBP features |
14 | | - |
15 | | -- Encapsulated processes and information packets. |
16 | | -- The external definition of connections |
17 | | -- Asynchronous |
18 | | -- Information packets with unique ownership and defined lifetimes |
19 | | -- Bounded connections with a finite capacity and reserve pressure. |
20 | | - |
21 | | -## What can `dagrs` do |
22 | | - |
23 | | -`dagrs` allows users to easily execute multiple sets of tasks with complex graph dependencies. It only requires: |
24 | | -The user defines tasks and specifies the dependencies of the tasks, and `dagrs` can execute the tasks sequentially in the topological sequence of the graph. |
25 | | -For example: |
26 | | - |
27 | | -```mermaid |
28 | | -flowchart LR |
29 | | - A((Task a))-->B |
30 | | - A-->C |
31 | | - B((Task b))-->D |
32 | | - C((Task c))-->D |
33 | | - B-->F |
34 | | - C-->E |
35 | | - D((Task d))-->G |
36 | | - E((Task e))-->G |
37 | | - F((Task f))-->G((Task g)) |
38 | | -``` |
| 16 | +The development of `dagrs` follows the concept of Flow-based Programming. |
39 | 17 |
|
40 | | -This graph represents the dependencies between tasks, and the graph composed of tasks must satisfy two points: |
| 18 | +### Flow based Programming |
| 19 | +[Flow-based Programming](https://en.wikipedia.org/wiki/Flow-based_programming)(FBP) was invented by J. Paul Morrison in the early 1970s. It was initially implemented in software for a Canadian bank. |
| 20 | +Over the years, it’s had various names but has always maintained its core principles of reducing development time and managing processes efficiently. |
41 | 21 |
|
42 | | -- A graph allows only one point with zero in-degree and zero out-degree(Only one start task and one end task are allowed). |
| 22 | +FBP treats applications as networks of 'black box' processes that communicate by sending and receiving data, referred to as Information Packets, over predefined connections. It’s a component-oriented approach that fits well with modular software architecture. |
43 | 23 |
|
44 | | -- The graph itself is directed, and the user must ensure that there are no loops in the graph, that is, the dependencies of tasks cannot form a closed loop, otherwise the engine will refuse to execute all tasks, for example: |
| 24 | +### Key Features of FBP |
45 | 25 |
|
46 | | - ```mermaid |
47 | | - flowchart LR |
48 | | - A-->C |
49 | | - A((Task a))-->B |
50 | | - subgraph "Task b, c, and d form a loop" |
51 | | - B((Task b))-->C |
52 | | - C((Task c))-->D |
53 | | - D((Task d))-->B |
54 | | - end |
55 | | - ``` |
| 26 | +| **Feature** | **Description** | |
| 27 | +|-------------------------------|----------------------------------------------------------| |
| 28 | +| "Black box" Processes | Encapsulated processes and information packets. | |
| 29 | +| Independent Network Construction |The external definition of connections.| |
| 30 | +| Asynchronism | Asynchronous execution of processes and asynchronous communication. | |
| 31 | +| Ownership and Lifetime | Information packets with unique ownership and lifetime. | |
| 32 | +| Bounded and Finite Connction| Connections between processes are bounded, with a finite capacity.| |
| 33 | +| Reverse Pressure | Congestion control when there are too many packets. | |
56 | 34 |
|
57 | | -Among them, each task may produce output, and may also require the output of some tasks as its input. |
58 | 35 |
|
| 36 | +## Technology & Libraries |
59 | 37 |
|
| 38 | +Dagrs leverages cutting-edge technologies to ensure functionality and performance: |
60 | 39 |
|
| 40 | +- **[Rust](https://www.rust-lang.org/)** - A language empowering everyone to build reliable and efficient software. |
| 41 | +- **[tokio](https://crates.io/crates/tokio)** - An event-driven, non-blocking I/O platform for writing asynchronous I/O backed applications. |
| 42 | +- **[async_trait](https://crates.io/crates/async-trait)** - Type erasure for async trait methods. |
61 | 43 |
|
62 | 44 |
|
63 | 45 | ## Contribution |
@@ -117,11 +99,9 @@ Freighter is licensed under this Licensed: |
117 | 99 |
|
118 | 100 | ## Contact us |
119 | 101 |
|
120 | | -Quanyi Ma (email: [email protected]) |
121 | | - |
122 | | -Xiaolong Fu (email: [email protected]) |
| 102 | + |
123 | 103 |
|
124 | 104 | ### Discord |
125 | 105 |
|
126 | | -Welcome to join our discord channel https://discord.gg/z3d7d26U |
| 106 | +Welcome to join our discord channel https://discord.gg/4JzaNkRP |
127 | 107 |
|
0 commit comments