好的…我已经给了这个网站一个公平的search,并且阅读了很多关于这个主题的文章。 我发现这个问题: 在C#中的简单线程池代码特别有用。 不过,就像看起来一样,我需要的东西稍有不同。 我已经看了MSDN的例子,并适应了我的需求。 我提到的例子是在这里: http : //msdn.microsoft.com/en-us/library/3dasc8as(VS.80,printer).aspx 我的问题是这个。 我有一个相当简单的代码集,通过HttpWebRequest和WebResponse类加载网页,并通过Stream读取结果。 我在线程中引发这个方法,因为它需要执行很多次。 该方法本身很短,但它需要被触发的次数(每次不同的数据)是不同的。 它可以是从1到200的任何地方。 我读过的所有东西似乎都表明ThreadPool类是主要的候选者。 这是棘手的事情。 我可能需要说这个东西说100次,但我最多只能有3个线程运行(为这个特定的任务)。 我已经尝试通过设置ThreadPool上的MaxThreads : ThreadPool.SetMaxThreads(3, 3); 我不完全相信这种方法正在工作。 此外,我不想闯入系统上运行的其他网站或程序,这将运行。 所以,通过限制ThreadPool上的ThreadPool ,我可以确定这只适用于我的代码和我的线程吗? MSDN示例使用事件驱动方法并调用WaitHandle.WaitAll(doneEvents); 这是我如何做到这一点。 所以我的问题的核心是,如何确保或指定可以为其代码运行的线程的最大数量,但代码继续运行更多的线程,因为以前的完成,直到任意点? 我正确的解决这个问题吗? 此致 贾森 好吧,我已经添加了一个信号量方法,并完全删除了ThreadPool代码。 这似乎很简单。 我从我的信息: http : //www.albahari.com/threading/part2.aspx 这个例子向我展示了如何: [下面的文本是从网站复制/粘贴] 一个容量为1的Semaphore与一个Mutex或lock相似,只是Semaphore没有“所有者” – 它是线程无关的。 任何线程都可以在Semaphore上调用Release ,而在使用Mutex和lock ,只有获取资源的线程才能释放它。 在下面的例子中,十个线程在中间执行一个Sleep语句的循环。 Semaphore确保一次不超过三个线程可以执行该Sleep语句: class SemaphoreTest { static Semaphore s = new […]
有人可以请解释什么是每个请求的线程和每个连接线程? servlet的工作模式是什么? 如何分配线程来处理HTTP请求? 它是线程/请求还是连接? 假设我想要在Servlet的doGet()方法中asynchronous执行耗时的任务,我使用Java执行程序启动一个新的线程,以便在一个单独的线程中完成冗长的计算,并立即发送响应。 现在是否确保我已经释放了处理我的HttpServletRequest的线程,还是仍在使用,因为子线程仍在运行?
Microsoft .NET Base Class Library提供了几种创build线程的方法并启动它。 基本上,调用与提供相同types的服务的每一个非常相似:创build一个表示执行stream(或更多)的对象,为其分配一个表示要执行的执行stream的委托,并最终根据委托签名,作为参数。 那么,有两种方法(基本上): 1)使用System.Threading.Thread类。 Thread curr = new Thread(myfunction); /* In a class, myfunction is a void taking an object */ curr.Start(new Object()); /* Or something else to be downcast */ 2)使用System.Threading.ThreadPool类。 ThreadPool.QueueUserWorkItem(myfunction, new Object()); /* Same philosophy here */ 有什么特别的原因,我应该使用1)或2)? 性能的原因? 模式? 什么是最好的方法? 我有一种感觉,答案是:“依情况而定”。 你可以列举一种方法比另一种更好的情况吗?
为什么我得到这个错误信息? “WaitAll在STA线程上的多个句柄不被支持”。 我应该使用[MTAThreadAttribute]属性? 更新:不用WPF应用程序! 注意:错误在WaitHandle.WaitAll(doneEvents); 我正在使用一个标准的WPF项目 。 private void Search() { const int CPUs = 2; var doneEvents = new ManualResetEvent[CPUs]; // Configure and launch threads using ThreadPool: for (int i = 0; i < CPUs; i++) { doneEvents[i] = new ManualResetEvent(false); var f = new Indexer(Paths[i], doneEvents[i]); ThreadPool.QueueUserWorkItem(f.WaitCallBack, i); } // Wait for all […]
我使用ThreadLocal 在我的Java类中,我有时使用ThreadLocal作为避免不必要的对象创build的手段: @net.jcip.annotations.ThreadSafe public class DateSensitiveThing { private final Date then; public DateSensitiveThing(Date then) { this.then = then; } private static final ThreadLocal<Calendar> threadCal = new ThreadLocal<Calendar>() { @Override protected Calendar initialValue() { return new GregorianCalendar(); } }; public Date doCalc(int n) { Calendar c = threadCal.get(); c.setTime(this.then): // use n to mutate c return […]
是否有可能创build一个非守护进程的Python池? 我想要一个池可以调用一个内部有另一个池的函数。 谢谢。
什么是一个好的开源的C ++线程池实现在生产代码(类似boost)? 请提供您自己的示例代码或示例代码使用情况的链接。
我一直在阅读有关线程池模式,我似乎无法find以下问题的通常解决scheme。 我有时想让任务连续执行。 例如,我从文件中读取文本块,出于某种原因,我需要按照该顺序处理块。 所以基本上我想要消除一些任务的并发性。 考虑这种情况,带*的任务需要按照它们的顺序进行处理。其他任务可以按任意顺序处理。 push task1 push task2 push task3 * push task4 * push task5 push task6 * …. and so on 在一个线程池的上下文中,没有这个约束,一个待处理任务的队列工作正常,但是在这里显然没有。 我想过让一些线程在一个线程特定的队列上运行,其他的在“全局”队列上运行。 然后,为了连续执行一些任务,我只需将它们推送到单个线程所在的队列中。 这听起来有点笨拙。 所以,在这个漫长的故事中真正的问题是:你将如何解决这个问题? 你将如何确保这些任务是有序的 ? 编辑 作为一个更普遍的问题,假设上面的情况变成了 push task1 push task2 ** push task3 * push task4 * push task5 push task6 * push task7 ** push task8 * […]
我有下面的代码引发exception: ThreadPool.QueueUserWorkItem(state => action()); 当动作引发exception时,我的程序崩溃。 处理这种情况的最佳做法是什么? 相关: .Net ThreadPool线程的例外
我试图重写一些csv阅读代码,以便能够在Python 3.2.2中的多个核心上运行它。 我尝试使用多处理的Pool对象,我从工作示例中调整(并且已经为我的项目的另一部分工作)。 我遇到了一个错误消息,我发现很难破译和疑难解答。 什么是解决这个问题的好方法? 谢谢! 错误: Traceback (most recent call last): File "parser5_nodots_parallel.py", line 256, in <module> MG,ppl = csv2graph(r) File "parser5_nodots_parallel.py", line 245, in csv2graph node_chunks) File "/Library/Frameworks/Python.framework/Versions/3.2/lib/python3.2/multiprocessing/pool.py", line 251, in map return self.map_async(func, iterable, chunksize).get() File "/Library/Frameworks/Python.framework/Versions/3.2/lib/python3.2/multiprocessing/pool.py", line 552, in get raise self._value AttributeError: __exit__ 相关代码: import csv import time import datetime […]