【问题标题】:Will thread.join() block other clients also?thread.join() 也会阻塞其他客户端吗?
【发布时间】:2010-03-13 01:09:12
【问题描述】:
在 asp.net Web 应用程序中,假设每次用户发出请求并加载页面时,都会触发一个线程,该线程使用 thread.join() 来阻止执行直到完成。
假设这个线程需要 10 秒才能完成。
这是否意味着如果 5 个完全不同的用户在最后一个用户之后仅几毫秒向该页面发出请求,这是否意味着最后一个用户将等待 50 秒才能完成他们的请求?还是每个客户端请求都有线程?
【问题讨论】:
标签:
c#
concurrency
multithreading
【解决方案1】:
通常不会阻止其他用户。
但是,对Join 的调用会占用一个线程池线程。一旦所有线程都在使用中,后续请求必须等待线程可用。
【解决方案2】:
Join 本身只是阻塞当前线程,直到你要加入的线程执行完毕,所以通常调用它只会阻塞当前请求,不会阻塞其他用户。
如果出于某种不正当的原因,您在共享资源的锁定中调用 join,那会阻止其他用户尝试访问共享资源。
【解决方案3】:
听起来您正在描述一个场景,每个用户请求都会创建一个新的Thread,它会在页面加载期间执行一项任务。 Page Load 做了一些操作,然后调用thatThread.Join。如果是的话……
5 个用户同时访问该页面需要多长时间很大程度上取决于 thatThread 正在做什么。特别是如果单独产生的线程相互交互。例如,如果他们在执行的一部分中锁定了共享资源,那么是的,同时请求会影响性能。如果在操作期间保持锁定,那么是的,它可能对性能产生线性影响。
另一方面,如果他们执行完全独立的任务,那么他们不会对性能产生线性影响。
如果您能提供更多关于线程在做什么的详细信息,我们可以更好地回答这个问题。