# tasks
**Repository Path**: yuanhack/tasks
## Basic Information
- **Project Name**: tasks
- **Description**: 这个程序是 2010 年业余时写的用来研究任务调度和带优先级的任务队列的。
task_data.c task_data.h task_inc.h 可单独拿出来用到合适的任务环境中。
- **Primary Language**: C
- **License**: Not specified
- **Default Branch**: master
- **Homepage**: None
- **GVP Project**: No
## Statistics
- **Stars**: 0
- **Forks**: 0
- **Created**: 2016-01-21
- **Last Updated**: 2020-12-19
## Categories & Tags
**Categories**: Uncategorized
**Tags**: None
## README
#TASKS
###使用步骤:
1. 声明一个 HashTaskList,或在栈上动态获取;
2. 调用InitTaskList初始化上一步的HashTaskList
3. 调用StartTaskManager开始启动任务管理
4. 调用ApplyTask向第一步得到的结构对象添加任务,每调用一次添一个任务
5. 执行的任务操作是一个回调函数, 需要自己实现
```
对于一个 HashTaskList, InitTaskList 和 StartTaskManager 只调用一次
main.c 是一个使用示例,随机生成 -10 ~ 10 优先级的批任务
示例任务很简单,处理函数 thread_operator 只打印传入的数据然后usleep
片刻就任务完成。
示例操作:
apply number
申请 number 个随机优先级的任务,例如 apply 10000
app
查看任务区待执行的任务列表,各优先级下面的任务数量
rec
查看回收区待回收的任务列表,这些任务都是已经完成的,列表看到的是任务占用的内存结点数
run
运行任务模块
clear
清屏
上述命令执行不分先后,需注意的是 input> 提示符后输入错误的话 需要 Ctrl+u 抹除重新输入
```
###关于任务管理:
1. 程序结束,终止程序既停止管理并且释放所有资源(现在的方式)
2. 调用一个终止函数,这个没有去写。
考虑到模块作为服务运行,不需要终止任务管理的函数
终止函数的流程: 需要取消所有1v1管理线程,在此需要一个列表保存这些线程的ID
需要清理表当中的互斥锁和信号变量,如果 HashTaskList 是动态分配,需要释放。
###关于改进:
1. 回收资源的线程和TaskList reclaim[LEVEL_ARRAY_LIMIT];是可以省掉的
但考虑到模块功能的延伸:
如果任务执行失败,先移动到某个地方,过段时间在放回来重试,等等...
其实还有很多可能用到它的地方...所以,依旧保留
2. 有多少个任务可以并发管理目前是固定的
其实可添加一个对 StartTaskManager 所生成的线程管理的数据结构
这样就能动态的增加或减少任务管理的1v1线程
* 事实上我并不想做这个管理的东西在里面, 因为对后台来说
* 对提供服务的程序而言这东西一般是固定不变的,没有什么必要
这个程序是 2010 年业余时写的用来研究任务调度和带优先级的任务队列的。
task_data.c task_data.h task_inc.h 可单独拿出来用到合适的任务环境中。
线程模式下频繁申请和销毁并不好,有需要的可以改为线程池,其实这部分应该去掉
毕竟回调模式相当好用,回调模式的略微修改一下已可用于生产环境。