|
马上注册,结交更多好友,享用更多功能,让你轻松玩转社区。
您需要 登录 才可以下载或查看,没有帐号?立即注册
x
楼上说交互性不好,太牵强了吧。在微软提供的一套框架中,利用asp做网站,开发效率高,使用人数少,减少不必要的开销。交互性是互动方式,是有开发人员决定的。当程序运转时,碰着了一个问题,假如WaitHandle数组凌驾64个元素以后,WaitHandle工具的WatiAll办法复工了。厥后为了程序能运转,只得想了一个笨举措:先创立两个WaitHandle工具放在数组,然后用轮回两个两个地运转义务。比来笔者在用.Net写程序时碰到一个成绩:有N个互不相干的义务要在线程池中跑,但有一个线程要守候N个义务完成以后才干持续。而这个N是个未知数,大概会很年夜(因而才会想到利用线程池而不是手动往new一个therad)。翻了翻.Net类库的文档,发明一个叫WaitHandle的类。这个类的用法挺有意义,必要为每一个线程创立一个WaitHandle工具并把它们放在一个数组中,然后用WaitHandle类中的WaitAll办法来守候这些WaitHandle被挪用Set办法。(代码就不写了,能够参考MSDNhttp://msdn.microsoft.com/zh-cn/library/system.threading.waithandle.aspx)
固然以为这有点庞大,但仍是试了试。当程序运转时,碰着了一个问题,假如WaitHandle数组凌驾64个元素以后,WaitHandle工具的WatiAll办法复工了。厥后为了程序能运转,只得想了一个笨举措:先创立两个WaitHandle工具放在数组,然后用轮回两个两个地运转义务。代码的思绪也许是上面如许:
WaitHandle[]handles=newWaitHandle[]{newAutoResetEvent(false),newAutoResetEvent(false)};inttimes=(int)N/2;inti;for(i=0;i<times;i++){ThreadPool.QueueUserWorkItem(newWaitCallback(Tasks[i*2]),handles[0]);ThreadPool.QueueUserWorkItem(newWaitCallback(Tasks[i*2+1]),handles[1]);WaitHandle.WaitAll(handles);}if(i*2<N){ThreadPool.QueueUserWorkItem(newWaitCallback(Tasks[i*2+1]),handles[0]);WaitHandle.WaitAny(handles);}
固然代码这么写对照庞大,但最少能够包管运转时不会出成绩。但这么写代码明显其实不KISS!因而问了问妙手,说有个RegisterWaitForSingleObject办法,但一看这个办法的参数列表就够让人晕的了。有点吊唁Java了,记得Java中有个CountDownLatch类,创立类的时分赋一个初始值X,然后主线程中挪用await,线程池中跑的线程挪用countDown办法。就能够完成主线程守候X次countDown办法挪用以后持续。如许既没有64个WaitHandle的限定,也不必往研讨谁人RegisterWaitForSingleObject办法。不外成绩在于.Net中并没有这么一个器材,只能本人下手了。
classCountDownLatch{privateobjectlockobj;privateintcounts;
publicCountDownLatch(intcounts){this.counts=counts;}
publicvoidAwait(){lock(lockobj){while(counts>0){Monitor.Wait(lockobj);}}}
publicvoidCountDown(){lock(lockobj){counts--;Monitor.PulseAll(lockobj);}}}
有了这个器材,下面的代码能够改的更少一些。
CountDownLatchcdl=newCountDownLatch(N);for(inti=0;i<N;i++){ThreadPool.QueueUserWorkItem(newWaitCallback(Tasks[i]),cdl);}cdl.Awati();
而关于义务的代码来讲,在开头处吧对WaitHandle的Set办法的挪用改成对CountDownLatch类的CountDown办法的挪用便可。
最初,我想说的是实在没需要把思绪都拘谨在.Net上大概Java上,互相自创会让思绪更坦荡一些。
不外有句内心话想说的就是,实在Java的类库在某些方面做的比.Net好一些。
缺点:安全性不是太差了,还行,只要你充分利用系统自带的工具;唯一缺点就是执行效率慢,如何进行网站优化以后,效果会比较好。 |
|