# 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 可单独拿出来用到合适的任务环境中。
线程模式下频繁申请和销毁并不好,有需要的可以改为线程池,其实这部分应该去掉
毕竟回调模式相当好用,回调模式的略微修改一下已可用于生产环境。