106 lines
2.9 KiB
Markdown
106 lines
2.9 KiB
Markdown
# HevTaskSystem
|
|
|
|
[](https://github.com/heiher/hev-task-system)
|
|
|
|
HevTaskSystem is a simple, lightweight multi-task system (coroutines).
|
|
|
|
The task system is executed within a native process/thread. In task system, you
|
|
can create many tasks and attach them to the task system. When a task yields or
|
|
is blocked by I/O, the scheduler will pick a suitable task from running list and
|
|
switch to it. Memory space, file descriptors, and other resources are shared among
|
|
all tasks in the task system. Each task has its private, standalone task structure
|
|
(#HevTask) and stack in heap of the process.
|
|
|
|
Within a task, you can allocate memory from heap, read and write data to the stack,
|
|
and perform I/O operations in synchronized mode.
|
|
|
|
## Features
|
|
|
|
* Simple/lightweight task.
|
|
* I/O operations wrapper.
|
|
* Inter-task synchronous. (Mutex/Condition)
|
|
* Inter-task communications. (Channel)
|
|
* Slice-based memory allocator.
|
|
* Call on new stack.
|
|
* Multi-thread support.
|
|
* Multi-platform support. (Linux/BSD/macOS/Windows)
|
|
|
|
## How to Build
|
|
|
|
### Unix
|
|
|
|
```bash
|
|
git clone https://gitlab.com/hev/hev-task-system
|
|
cd hev-task-system
|
|
make
|
|
|
|
# Link with librt (only for glibc versions before 2.17)
|
|
make LDFLAGS=-lrt
|
|
|
|
# Disable stack overflow detection
|
|
make ENABLE_STACK_OVERFLOW_DETECTION=0
|
|
|
|
# Set stack backend to heap (Recommended for 32-bit)
|
|
make CONFIG_STACK_BACKEND=STACK_HEAP
|
|
|
|
# Disable sliced memory allocator
|
|
make ENABLE_MEMALLOC_SLICE=0
|
|
|
|
# Disable I/O splice by splice syscall (for old Linux kernel)
|
|
make ENABLE_IO_SPLICE_SYSCALL=0
|
|
|
|
# Demos
|
|
make apps
|
|
|
|
# Tests
|
|
make tests
|
|
```
|
|
|
|
### Android
|
|
|
|
```bash
|
|
mkdir hev-task-system
|
|
cd hev-task-system
|
|
git clone https://gitlab.com/hev/hev-task-system jni
|
|
ndk-build
|
|
```
|
|
|
|
### iOS and MacOS
|
|
|
|
```bash
|
|
git clone https://gitlab.com/hev/hev-task-system
|
|
cd hev-task-system
|
|
# will generate HevTaskSystem.xcframework
|
|
./build-apple.sh
|
|
```
|
|
|
|
### Windows (MSYS2)
|
|
|
|
```bash
|
|
export MSYS=winsymlinks:native
|
|
git clone https://gitlab.com/hev/hev-task-system
|
|
cd hev-task-system
|
|
make
|
|
```
|
|
|
|
## Demos
|
|
|
|
1. [simple](https://gitlab.com/hev/hev-task-system/blob/main/apps/simple.c)
|
|
1. [channel](https://gitlab.com/hev/hev-task-system/blob/main/apps/channel.c)
|
|
1. [timeout](https://gitlab.com/hev/hev-task-system/blob/main/apps/timeout.c)
|
|
1. [wakeup](https://gitlab.com/hev/hev-task-system/blob/main/apps/wakeup.c)
|
|
1. [echo-server](https://gitlab.com/hev/hev-task-system/blob/main/apps/echo-server.c)
|
|
1. [call](https://gitlab.com/hev/hev-task-system/blob/main/apps/call.c)
|
|
1. [gtk](https://gitlab.com/hev/hev-task-system/blob/main/apps/gtk.c)
|
|
1. [curl](https://gitlab.com/hev/hev-task-system/blob/main/apps/curl.c)
|
|
|
|
## Contributors
|
|
|
|
* **hev** - https://hev.cc
|
|
* **Mike Wang** - https://github.com/MikeWang000000
|
|
|
|
## License
|
|
|
|
MIT
|
|
|