JPR*_*ddy 7 .net c# multithreading threadpool
我在很多地方读过.net Threadpool用于短时间跨度任务(可能不超过3秒).在所有这些提及中,我没有找到一个具体的原因,为什么它不应该被使用.
甚至有些人说,如果我们使用长时间的任务并导致死锁,它会导致令人讨厌的结果.
有人可以用简单的英语用技术原因解释它为什么我们不应该使用线程池进行长时间跨度任务?
具体来说,我甚至想提供一个场景,并想知道为什么ThreadPool不应该在这种情况下使用,并且背后有正当的理由.
场景:我需要处理数千个用户的数据.从本地数据库检索用户的处理数据,并使用该信息连接到托管在其他位置的API,API处理后的响应将存储在本地数据库中.
如果我使用线程限制为20的ThreadPool,有人可以在这种情况下解释我的陷阱吗?每个用户的处理时间可以在3秒至1分钟(或更长)的范围内.
Jon*_*eet 17
线程池的要点是避免创建线程所花费的时间比使用它所花费的时间长的情况.通过重用现有线程,我们可以避免这种开销.
缺点是线程池是一个共享资源:如果你使用的是线程,那么其他东西就不能.因此,如果你有很多长时间运行的任务,你最终可能会遇到线程池饥饿,甚至可能导致死锁.
不要忘记您的应用程序的代码可能不是使用线程池的唯一代码...系统代码也使用它很多.
听起来你可能想拥有自己的生产者/消费者队列,只有少量线程处理它.另外,如果你可以跟使用异步API的其他服务,你可能会发现,在处理的每一位你的计算机将是短暂的.