【问题标题】:Threading.Thread and Threading.Task on same application , does tasks taking considerations of that?Threading.Thread 和 Threading.Task 在同一个应用程序上,任务是否考虑到这一点?
【发布时间】:2012-03-08 10:25:50
【问题描述】:

我正在开发具有少量线程(每个都在其队列上工作)和并行任务(Parallel.For 或只是 Thread.StartNew)的应用程序。

我的问题是,在最新版本的线程中引入的 MS 线程组件(如线程池、任务等)是否知道我在新线程上执行操作时手动定义的其他线程。

例如:如果我有 4 个 cpu 和 1 个线程在队列上工作的 pc(线程并不总是工作,它使用重置事件等),并且我有 10 个并发操作(每个)在它的任务上运行。这是否意味着 3 个任务将与我的应用程序一起运行,而其他任务等待它们(任务)完成?当线程进入睡眠状态时会发生什么(任务操作是否会在线程所在的 cpu 上运行?如果是这样,当我的线程需要立即运行并且占用 cpu 时间的任务挂起它时会发生什么?这是否意味着我的线程也不会运行,或者在某些时候我会看到上下文切换?)

很多很多的问题...希望有人能耐心地给我一个答案:)

谢谢, 扎希

【问题讨论】:

    标签: .net multithreading task-parallel-library


    【解决方案1】:

    ThreadPool/TPL 基础架构对“手动”创建的线程一无所知,它只会尽最大努力调整自己以使用可用的 CPU 资源。从那里你依靠操作系统来完成它的工作并安排彼此之间的线程。例如,如果您的手动线程在等待对象时被阻塞,它不会消耗资源,操作系统将安排另一个可用线程(可能来自 ThreadPool/TPL)来代替执行。如果您考虑一下,这实际上与在操作系统上运行的多个应用程序没有什么不同。他们彼此一无所知,但操作系统尽最大努力让每个人都开心,并从可用资源中分得一杯羹。

    【讨论】:

      猜你喜欢
      • 2018-06-24
      • 1970-01-01
      • 2018-11-11
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2017-05-30
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多