thread.join()也会阻止其他客户端吗?

时间:2010-03-13 01:09:12

标签: c# concurrency multithreading

在asp.net Web应用程序中,假设每次用户发出请求并加载页面时,都会触发一个线程,该线程使用thread.join()阻止执行直到它完成。

假设此线程需要10秒钟才能完成。

这是否意味着如果5个完全独立的用户向此页面发出请求,仅仅是在最后一个之后的几毫秒,这是否意味着最后一个用户将等待50秒才能完成他们的请求?或者是每个客户端请求是否已经线程化?

3 个答案:

答案 0 :(得分:4)

通常,不会阻止其他用户。

但是,对Join的调用会占用一个线程池线程。一旦所有线程都在使用中,后续请求必须等待线程变为可用。

答案 1 :(得分:2)

Join本身只阻塞当前线程,直到您要加入的线程完成执行,因此通常调用它只会阻止当前请求,而不是其他用户。

如果出于某种不正当的原因,您在共享资源的锁定中呼叫join,则 会阻止尝试访问共享资源的其他用户。

答案 2 :(得分:0)

听起来您正在描述一个场景,其中每个用户请求都会创建一个新的Thread,在页面加载期间执行任务。页面加载会执行一些操作,然后调用thatThread.Join。如果是那么......

5个用户同时访问该页面需要多长时间取决于thatThread正在做什么。特别是如果单独生成的线程彼此交互。例如,如果他们在共享资源上锁定了一部分执行,那么同时请求将影响性能。如果在操作期间保持锁定,那么它可能对性能产生线性影响。

另一方面,如果他们完成独立的任务,那么他们就不会对性能产生线性影响。

如果你能提供关于线程正在做什么的更多细节,我们可以更好地回答这个问题。