小编Vak*_*ang的帖子

异步编程,线程和效率

我的问题不仅适用于C#和Asp.net,但我更容易提出更具体的问题.

当Asp.net请求等待异步IO操作时,该线程基本上进入线程池以供其他请求重用.为什么这比直到IO操作完成之前休眠线程更有效?毕竟,当线程返回到线程池时,其堆栈需要保留在内存中以完成原始请求.我的假设是我们不能重用分配给线程的内存,除非我们在其他地方复制使用过的堆栈内存并且复制数据可能会引入额外的开销,这可能是不合理的.

我错过了什么吗?我的假设是错的吗?请解释.

编辑:jlew指出的答案缺少一点.当线程返回池时,请求使用的堆栈内存会发生什么?如果我们不能重用内存,那么重用线程有什么意义呢?如果我们想重用未使用的堆栈部分,那么我们将不得不移动一些内存.如果是这样,移动内存并重新使用未使用的堆栈内存可以提高整体效率吗?

c# asp.net async-await

3
推荐指数
1
解决办法
265
查看次数

操作系统如何使用多个CPU内核

有很多文章讨论多核神话。为了真正受益于多个内核,需要编写并行算法。他们中许多人提到阿姆达尔定律

为了简单起见,假设我们有一台带有4核商品CPU的台式计算机。并假设目标是提高我们的应用程序性能以及整体系统性能。

我想知道如何使用CPU内核来执行任务。

  • 是否将单个进程的线程分配给所有内核
  • 或者将来自不同进程的线程安排在不同的内核上运行。

如果是后者,那为什么还要讨论神话呢?即使所有进程都是单线程的,多任务OS也不总是受益于多核CPU吗?来自同一进程的线程是否更有可能在多个内核上同时调度?

  • 有哪些重要因素?CPU缓存可能吗?可能与某些应用程序相关?为什么?
  • 您为什么要使用并行库/算法?毕竟,CPU资源在所有正在运行的进程之间共享,并且总是有足够的资源。

是否有一个“主动过程”概念?即,最受调度程序关注的过程。如果是这样,那么此过程通常会引起多少关注?

performance multithreading operating-system multicore

-3
推荐指数
1
解决办法
2046
查看次数