现在有两种做法创建一个Thread,然后ThreadPool里分配多个workerItem。这样做不好的地方是每执行一轮循环,必须要等一轮的各个worker都结束之后,才能开始下一轮。
还有一种做法是根据需要创建多个Thread,单独执行。这样就互不相干了。这样做有缺点?
还有一种做法是根据需要创建多个Thread,单独执行。这样就互不相干了。这样做有缺点?
解决方案 »
- C#访问JAVA封装COM组件的问题,请高手帮忙,谢谢
- SideBar的子Item好像不能添加自己定义的组件,请问有无其他更好的第三方控件?
- 用正则表达式 匹配时间要怎么做 或是用文本比对也可以!
- C# WinForm DataGridView查询结果显示中文HeaderText的问题
- vs2008如何发布WCF服务?
- 求一个.net2003和SQL 2000有关的动态树形菜单
- 求助C#(Winform)获取地址栏后面的参数
- ListView控件如何自动调整字段的长度适应字段的内容?
- .net中如何在线程空间上分配一个Exception对象(或者对象的引用)?
- textbox连接数据库
- 各位 帮我分析下 为什么出错? 求解释
- 请问自定义控件该如何支持泛型?
要了解多线程。它是在充分利用cpu资源,同时做几件事儿,sleep的时候线程都休眠了,什么也不做,当然cpu没什么大动作了。还有建议使用线程池,在线程比较杂乱的情况下。如果单独执行一个或两个操作直接new也无所谓,按需来分,一般还是用线程池的多。
2.我的想法是既然sleep的时候不占用内存,那我是不是可以把暂时不需要的线程给sleep呢?等到想用的时候我在用?
再者,我的多线程程序开启后,为何cpu狂飙啊。只有sleep的时候是好的。要了解多线程。它是在充分利用cpu资源,同时做几件事儿,sleep的时候线程都休眠了,什么也不做,当然cpu没什么大动作了。还有建议使用线程池,在线程比较杂乱的情况下。如果单独执行一个或两个操作直接new也无所谓,按需来分,一般还是用线程池的多。
你这叫做线程池?你说的“我用的是线程池”是哪一家的线程池呢?肯定不是.net中的,因为任何介绍.net框架的线程池知识的文章(例如msdn)都不大可能留下这个疑问。
{
public static bool BindHandle(SafeHandle osHandle);
public static void GetAvailableThreads(out int workerThreads, out int completionPortThreads);
public static void GetMaxThreads(out int workerThreads, out int completionPortThreads);
public static void GetMinThreads(out int workerThreads, out int completionPortThreads);
public static bool QueueUserWorkItem(WaitCallback callBack);
public static bool QueueUserWorkItem(WaitCallback callBack, object state);
public static RegisteredWaitHandle RegisterWaitForSingleObject(WaitHandle waitObject, WaitOrTimerCallback callBack, object state, int millisecondsTimeOutInterval, bool executeOnlyOnce);
public static RegisteredWaitHandle RegisterWaitForSingleObject(WaitHandle waitObject, WaitOrTimerCallback callBack, object state, long millisecondsTimeOutInterval, bool executeOnlyOnce);
public static RegisteredWaitHandle RegisterWaitForSingleObject(WaitHandle waitObject, WaitOrTimerCallback callBack, object state, TimeSpan timeout, bool executeOnlyOnce);
public static RegisteredWaitHandle RegisterWaitForSingleObject(WaitHandle waitObject, WaitOrTimerCallback callBack, object state, uint millisecondsTimeOutInterval, bool executeOnlyOnce);
public static bool SetMaxThreads(int workerThreads, int completionPortThreads);
public static bool SetMinThreads(int workerThreads, int completionPortThreads);
public static unsafe bool UnsafeQueueNativeOverlapped(NativeOverlapped* overlapped);
public static bool UnsafeQueueUserWorkItem(WaitCallback callBack, object state);
public static RegisteredWaitHandle UnsafeRegisterWaitForSingleObject(WaitHandle waitObject, WaitOrTimerCallback callBack, object state, int millisecondsTimeOutInterval, bool executeOnlyOnce);
public static RegisteredWaitHandle UnsafeRegisterWaitForSingleObject(WaitHandle waitObject, WaitOrTimerCallback callBack, object state, long millisecondsTimeOutInterval, bool executeOnlyOnce);
public static RegisteredWaitHandle UnsafeRegisterWaitForSingleObject(WaitHandle waitObject, WaitOrTimerCallback callBack, object state, TimeSpan timeout, bool executeOnlyOnce);
(false)]
public static RegisteredWaitHandle UnsafeRegisterWaitForSingleObject(WaitHandle waitObject, WaitOrTimerCallback callBack, object state, uint millisecondsTimeOutInterval, bool executeOnlyOnce);
}最基本地,只要会用一样:QueueUserWorkItem,这就可以了。它是创建一个回调方法,而根本不需要创建什么Thread(何时创建的Thread你根本不知道)。至于什么是“一轮循环”我就看不懂这是何意了。