以下代码启动了一个最多8个线程的线程池。并试图向其中放10个线程。当然,会产生等待。
OPLSessionLinkTable theSessoins = new OPLSessionLinkTable(); int maxThreadNum, portThreadNum;
int minThreadNum;
ThreadPool.SetMaxThreads(8, 4);
ThreadPool.SetMinThreads(2, 1);
ThreadPool.GetMaxThreads(out maxThreadNum, out portThreadNum);
ThreadPool.GetMinThreads(out minThreadNum, out portThreadNum);
theSessoins.TheSessonTimeOut = 1000;
Console.WriteLine("最大线程数:{0}", maxThreadNum);
Console.WriteLine("最小空闲线程数:{0}", minThreadNum); Console.WriteLine("启动线程池任务:");
ThreadPool.QueueUserWorkItem(new WaitCallback(Proc1), theSessoins);
ThreadPool.QueueUserWorkItem(new WaitCallback(Proc2), theSessoins);
ThreadPool.QueueUserWorkItem(new WaitCallback(Proc3), theSessoins);
ThreadPool.QueueUserWorkItem(new WaitCallback(Proc4), theSessoins);
ThreadPool.QueueUserWorkItem(new WaitCallback(Proc5), theSessoins);
ThreadPool.QueueUserWorkItem(new WaitCallback(Proc6), theSessoins);
ThreadPool.QueueUserWorkItem(new WaitCallback(Proc7), theSessoins);
ThreadPool.QueueUserWorkItem(new WaitCallback(Proc8), theSessoins);
ThreadPool.QueueUserWorkItem(new WaitCallback(Proc9), theSessoins);
ThreadPool.QueueUserWorkItem(new WaitCallback(Proc0), theSessoins);连接池 ADO.net 的连接池是默认的。依据同样的连接串创建的连接会自动进入同一个连接池。
假如你的连接串中指定了,连接池的上限为10,期限时间为10秒。你一次open12个连接。则有2个进入等待。
当你close掉打开的10个连接时。连接并没有关闭,而是返回连接池,等待中的两个连接将从池内得到2个连接。此时,池内还有8个可用连接。这8个可用连接如果没有被再次open将在10秒后,真正断开。
OPLSessionLinkTable theSessoins = new OPLSessionLinkTable(); int maxThreadNum, portThreadNum;
int minThreadNum;
ThreadPool.SetMaxThreads(8, 4);
ThreadPool.SetMinThreads(2, 1);
ThreadPool.GetMaxThreads(out maxThreadNum, out portThreadNum);
ThreadPool.GetMinThreads(out minThreadNum, out portThreadNum);
theSessoins.TheSessonTimeOut = 1000;
Console.WriteLine("最大线程数:{0}", maxThreadNum);
Console.WriteLine("最小空闲线程数:{0}", minThreadNum); Console.WriteLine("启动线程池任务:");
ThreadPool.QueueUserWorkItem(new WaitCallback(Proc1), theSessoins);
ThreadPool.QueueUserWorkItem(new WaitCallback(Proc2), theSessoins);
ThreadPool.QueueUserWorkItem(new WaitCallback(Proc3), theSessoins);
ThreadPool.QueueUserWorkItem(new WaitCallback(Proc4), theSessoins);
ThreadPool.QueueUserWorkItem(new WaitCallback(Proc5), theSessoins);
ThreadPool.QueueUserWorkItem(new WaitCallback(Proc6), theSessoins);
ThreadPool.QueueUserWorkItem(new WaitCallback(Proc7), theSessoins);
ThreadPool.QueueUserWorkItem(new WaitCallback(Proc8), theSessoins);
ThreadPool.QueueUserWorkItem(new WaitCallback(Proc9), theSessoins);
ThreadPool.QueueUserWorkItem(new WaitCallback(Proc0), theSessoins);连接池 ADO.net 的连接池是默认的。依据同样的连接串创建的连接会自动进入同一个连接池。
假如你的连接串中指定了,连接池的上限为10,期限时间为10秒。你一次open12个连接。则有2个进入等待。
当你close掉打开的10个连接时。连接并没有关闭,而是返回连接池,等待中的两个连接将从池内得到2个连接。此时,池内还有8个可用连接。这8个可用连接如果没有被再次open将在10秒后,真正断开。
连接池也就是设两个变量,没什么技术难度,你不设也在用连接池,只不过是用默认值。
线程在Web应用中的作用到底是什么,什么时候要起用新的线程?
可以利用多线程来保护应用正常稳定运行吗?
不太明白,web及时通讯系统在线判定是靠Ajax心跳和,webservice实现的吧,和多线程有什么关系?
线程,定义....(我确实找不到简要的说明)
多线程技术,指在一个进行当中可以创建多个线程来“同时”处理多个事务。
线程池,由于频繁的创建线程和销毁线程会带来一定的成本,就可以预先创建,但不立即销毁,以共享方式为别人提供服务,一来可以提供效率再者可以控制线程无线扩张。连接,指一点与另一点的连接。
连接池,跟线程池有同样的妙处。但是,连接池可以是基于多线程来实现,也可以通过多进程来实现,也可能是单实例的。举个例子:
Socket在做为服务时,可以同时监听多个客户端连接,那么它的实现原理就有点像“连接池”。
每个客户通过多个端口“同时”向服务器发送数据,可以认为是多线程。
而服务器可能已经建立好了“50”个线程来等待同时处理/分析客户端发来的数据。可以为是有个“线程池”。
Socket在做为服务时,可以同时监听多个客户端连接,那么它的实现原理就有点像“连接池”。
每个客户通过多个端口“同时” 向服务器发送数据,可以认为是多线程。
而服务器可能已经建立好了“50”个线程来等待同时处理/分析客户端发来的数据。可以为是有个“线程池”。这个例子好!
生成静态 可以用到点击一个按钮运行多线程
然后你就可以继续浏览其他页面如果不是多线程而浏览其他页面的话 生成不会停止(应该 嘻嘻)反正你在页面运行一条命令后
又不想等的地方就可以用多线程