利用多线程解决多处理器充分利用的问题
2005-07-20 08:48
411 查看
在B/S架构的应用中经常会遇到某个过程由于业务逻辑复杂而导致执行时间超长而达不到用户要求的情况。虽然说在IIS中会为每个用户建立一个单独的线程去处理,但是对于单个的用户来说仍然是只有一个线程,而且通常情况下开发的程序都是在主线程中运行。即使服务器有多个处理器,而实际上能够利用的大部分情况只有一个处理器。前一段时间我们公司的产品在为一个客户实施的时候就遇到了这样的问题,客户的服务器上面有4个CPU,而实际上真正在使用的只有一个,因为实际并发的用户基本上是一个,但有一些操作仍然要在一分钟以上。
为了解决这个问题,需要在程序运行的过程中建立新的线程,交给操作系统出分配给空闲的处理器(在单线程的情况下操作系统是不能这么做的)。对于大型项目开发来说就需要一个方便使用的线程处理的Class,经过尝试完成了下面的这个线程处理类。
public delegate void MultiWaitCallback(params object[] Params);
public delegate object WithReturnMultiWaitCallback(params object[] Params);
public class ThreadManager
public static bool DeleteEntity(PublicCodeItemEntity entity, DbBroker broker)
private static object ProcDeleteEntityWithBroker(params object[] Params)
{
PublicCodeItemEntity entity=Params[0] as PublicCodeItemEntity;
DbBroker broker=Params[1] as DbBroker;
broker.TransactionCommit +=new BrokerTransactionEventHandler(broker_TransactionCommit);
bool res = broker.ExecuteNonQuery(PublicCodeItemDataAccess.GetDeleteEntity(entity)) > 0;
return res;
}
可能在上面的实现方法上还有很多的不足之处,希望大家能够不吝赐教。
为了解决这个问题,需要在程序运行的过程中建立新的线程,交给操作系统出分配给空闲的处理器(在单线程的情况下操作系统是不能这么做的)。对于大型项目开发来说就需要一个方便使用的线程处理的Class,经过尝试完成了下面的这个线程处理类。
public delegate void MultiWaitCallback(params object[] Params);
public delegate object WithReturnMultiWaitCallback(params object[] Params);
public class ThreadManager
public static bool DeleteEntity(PublicCodeItemEntity entity, DbBroker broker)
private static object ProcDeleteEntityWithBroker(params object[] Params)
{
PublicCodeItemEntity entity=Params[0] as PublicCodeItemEntity;
DbBroker broker=Params[1] as DbBroker;
broker.TransactionCommit +=new BrokerTransactionEventHandler(broker_TransactionCommit);
bool res = broker.ExecuteNonQuery(PublicCodeItemDataAccess.GetDeleteEntity(entity)) > 0;
return res;
}
可能在上面的实现方法上还有很多的不足之处,希望大家能够不吝赐教。
相关文章推荐
- 利用局部变量解决多线程访问问题
- Spring-利用ThreadLocal解决线程安全问题(多线程并发登录)
- 利用多线程解决多业务不同定时区间歇触发问题的一种方法
- 利用委托解决多线程中“不是此控件创建的线程”的问题
- 利用缓存与多线程(线程池管理)加载,解决RecycleView显示较多图片时出现的卡顿问题
- 利用Java的类加载机制,来变相的解决多线程访问的问题
- 利用委托解决多线程中“不是此控件创建的线程”的问题
- 利用多线程解决生成券性能问题
- VB.net使用多线程与委托解决时间延迟的问题
- 【转】利用ftpclient下载文件,解决用window.open打开ftp地址中有中文,不能下载的问题
- 利用fn标签解决标题过长自动加省略号的问题
- html5新特性:利用history的pushState等方法来解决使用ajax导致页面后退和前进的问题
- html5新特性:利用history的pushState等方法来解决使用ajax导致页面后退和前进的问题
- html5新特性:利用history的pushState等方法来解决使用ajax导致页面后退和前进的问题
- 利用java技术生成验证码的多种方法及遇到问题的解决
- 利用“队列”解决“窗口混乱”问题
- 多线程(线程间通信-多生产者多消费者问题-JDK1.5解决办法-范例),停止线程,线程中方法的区别,匿名内部类实现多线程,线程总结
- android利用反射来解决版本兼容问题。
- 利用python来解决 小鸡,公鸡,母鸡的数学问题
- 采用多线程方式,解决由于查询等待造成winfrom假死问题