【问题标题】: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 正在做什么。特别是如果单独产生的线程相互交互。例如,如果他们在执行的一部分中锁定了共享资源,那么是的,同时请求会影响性能。如果在操作期间保持锁定,那么是的,它可能对性能产生线性影响。

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

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

        【讨论】:

          猜你喜欢
          • 1970-01-01
          • 2019-09-20
          • 1970-01-01
          • 2015-09-10
          • 2013-10-21
          • 2014-11-26
          • 1970-01-01
          • 2020-03-18
          • 2017-04-18
          相关资源
          最近更新 更多