在asp.net Web应用程序中,假设每次用户发出请求并加载页面时,都会触发一个线程,该线程使用thread.join()阻止执行直到它完成。
假设此线程需要10秒钟才能完成。
这是否意味着如果5个完全独立的用户向此页面发出请求,仅仅是在最后一个之后的几毫秒,这是否意味着最后一个用户将等待50秒才能完成他们的请求?或者是每个客户端请求是否已经线程化?
答案 0 :(得分:4)
通常,不会阻止其他用户。
但是,对Join
的调用会占用一个线程池线程。一旦所有线程都在使用中,后续请求必须等待线程变为可用。
答案 1 :(得分:2)
Join
本身只阻塞当前线程,直到您要加入的线程完成执行,因此通常调用它只会阻止当前请求,而不是其他用户。
如果出于某种不正当的原因,您在共享资源的锁定中呼叫join
,则 会阻止尝试访问共享资源的其他用户。
答案 2 :(得分:0)
听起来您正在描述一个场景,其中每个用户请求都会创建一个新的Thread
,在页面加载期间执行任务。页面加载会执行一些操作,然后调用thatThread.Join
。如果是那么......
5个用户同时访问该页面需要多长时间取决于thatThread
正在做什么。特别是如果单独生成的线程彼此交互。例如,如果他们在共享资源上锁定了一部分执行,那么同时请求将影响性能。如果在操作期间保持锁定,那么它可能对性能产生线性影响。
另一方面,如果他们完成独立的任务,那么他们就不会对性能产生线性影响。
如果你能提供关于线程正在做什么的更多细节,我们可以更好地回答这个问题。