zoukankan      html  css  js  c++  java
  • c# 任务超时执行

    最近整理下各类框架,学习一下欠缺的东西。因为前一年开发过java服务端,知道java有很多开源框架,但是毕竟起来也很累。

    现在转回头从新审视c#,很基础,没有开源框架,因为以前它不开源,所以少,不用比较,全部自己造。

    我们在开发服务端时,有一个很严重的问题,就是多线程处理。这就有个任务长期运行,频繁启动,以及超时问题。

    java中的线程池很容易实现,c#中对应的就是Task,也可以。

    但是我们在开发过程中遇到过一个问题,现在启用国产软件,我们采用了一些国产数据库,这些数据库在运行一段时间后,

    数据库连接不返回了,一直卡着,一直要占用使用的线程,如果是服务端程序,这就死翘翘了,一段时间后,进程里面很有很多线程,然后变慢,然后卡死。

    现在整理一个服务端框架,为了解决这类问题,我自己开发了一个线程框架库,暂时不考虑它的性能优化,已经完成,这个框架作为我的服务框架一部分,我把它抽取出来,上传GIT;

    线程主要结构和使用:

    1.定义5类委托,你可以提供5类委托实现出来,我没有定义为接口,因为c#里面委托更加贴合方法。你可以自己改造成接口

    2.为5类委托专门写了出来委托类,就是在其中启动方法,开启线程,在线程中调用委托;把这些类统一称为TaskFutru

    3.TaskFutrue等待提交处理的委托对象,一旦提交了委托就执行;如果1分钟以内没有委托提交,则退出该线程;线程销毁,设置状态

    4.TaskFutrue中几个状态,分别是Cancel,Finsh,Complete,分别表示该类的使用情况

    5.ExecutorsThread类是最基础的了,其中的5个方法提交5类委托对象,在方法内部,采用Task类,监视超时,一旦任务超时,则立即调用TaskFutrue中的方法,取消线程,关闭线程,其中调用了Thread.abort()方法

    6.线程框架,我采用了.Net标准类型,测试发现.Net Core不支持Thread.abort(),所以在StaticThreadFactory定义了变量,

    如果需要关闭线程,就增加1,如果线程自动退出则减少1,设置了一个最大值,如果计数超过最大值,在ExecutorsThread中提交处理委托,则引起异常ThreadMaxEception(自定义),需要根据自己的业务处理该异常,无非是打印异常,终止提交或者重启程序,这个只能根据自己的业务了。

    7.所有TaskFutrue了都继承了接口ITaskThread

    该项目暂时命名为ExecutorService;以后发现问题会持续修改更新。

    我有一段时间没有关注c#了,如果c#本身已经有了该功能,或者可以简单的变相实现,或者有更加好的优秀开发组件实现了该功能,请大家留言告诉我,我也想现成的啊,不想写啊。

    但是,这个类库只能在服务端使用,为啥?因为耗资源多啊,你想想,你调用执行是不是要使用一个线程,底层执行委托是不是一个线程,然后监视超时是不是一个线程。也就是整个超时执行控制需要3个线程来完成一个任务。所以出来混是要换的。

    项目地址:

    https://github.com/jinyuttt/ExecutorService.git

  • 相关阅读:
    云路五年 未来正来
    免费公测:RDS只读实例
    【Open Search产品评测】-- 淘点点:基于OpenSearch,轻松实现一整套O2O类搜索解决方案
    阿里云启动“云合计划” 培育中国“微软”级企业
    【Open Search产品评测】- 来往,7天轻松定制属于自己的搜索引擎
    水塘抽样算法
    如何调度考生的座位
    如何去除有序数组的重复元素
    二分查找高效判定子序列
    如何k个一组反转链表
  • 原文地址:https://www.cnblogs.com/jinyu20180311/p/10312370.html
Copyright © 2011-2022 走看看