在 akka.net 中立即触发多个线程

2024-02-07

我不确定这是否与 akka.net 或 TPL 更多相关,但我将使用 actor 作为示例来澄清问题。

简而言之,问题是:有什么方法可以告诉 akka.net 一次触发比我实际拥有的 CPU 核心更多的线程吗?这是示例代码和详细信息:

我目前使用的是带有 8 核处理器的笔记本电脑。假设我要创建 20 个演员:

for (int i = 0; i < 20; i++)
{
    actorList.Add(system.ActorOf<ExampleActor>());
}

然后我向所有这些人传递一条信息:

actorList[0].Tell(new ExampleMessage());
Console.WriteLine("sent message to actor 1\t" + DateTime.Now.TimeOfDay);
actorList[1].Tell(new ExampleMessage());
Console.WriteLine("sent message to actor 2\t" + DateTime.Now.TimeOfDay);
...
actorList[19].Tell(new ExampleMessage());
Console.WriteLine("sent message to actor 20\t" + DateTime.Now.TimeOfDay);

演员在接收消息时所做的所有事情都是以下虚假的长期运行过程:

Console.WriteLine("Accessing slow service\t" + DateTime.Now.TimeOfDay
     + "\t" + Thread.CurrentThread.ManagedThreadId);
Thread.Sleep(60000);
Console.WriteLine("Service call was successful\t" + DateTime.Now.TimeOfDay
     + "\t" + Thread.CurrentThread.ManagedThreadId);

我还在其构造函数中包含此代码,以便我知道演员何时实际创建:

public ExampleActor()
{
    Console.WriteLine("Creating " + this.Self.Path + DateTime.Now.TimeOfDay);
    ....
}

因此,现在当我运行应用程序时,我首先会在同一毫秒内收到所有 20 个演员的“已发送消息给演员”行。但之后,当初始化的时候,首先只创建了 8 个 actor。

然后,由于其他演员都没有完成这项工作,正好 1 秒后,另一个演员被初始化(第 9 个演员)。又过了一秒,我们创建了第 10 个 actor,并开始了 Thread.Sleep 操作。

现在的问题是,有没有办法告诉 akka.net(或其下面的 TPL)我确定线程将为每个服务调用等待大约 60 秒?这样所有 20 个线程都会立即启动,而不是立即启动 8 个线程,并且在 12 秒过去后才运行全部 20 个线程?


Akka Actor 默认在 .Net ThreadPool 上运行。

您正在经历线程池饥饿,其中所有可用线程都繁忙(每个 CPU 一个)。当所有线程都繁忙时,ThreadPool 每秒会向其池中添加一个线程。

要“解决”您的问题,您可以使用 ThreadPool.SetMinThreads 增加最小线程数。但真正的解决方法是不阻止线程(并且不阻止参与者)。

如果您的工作负载受 CPU 限制,那么同时运行更多参与者并不会加快速度。

如果您的工作负载受 IO 限制,则应该异步调用它:

Receive<string>(msg =>
{
    DoSomethingAsync(msg).PipeTo(Self);
}

Receive<Result>(msg =>
{
   // Process the result
}
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

在 akka.net 中立即触发多个线程 的相关文章

  • GCC C++ (ARM) 和指向结构体字段的 const 指针

    假设有一个简单的测试代码 typedef struct int first int second int third type t define ADDRESS 0x12345678 define REGISTER type t ADDRE
  • Qt - 无法让 lambda 工作[重复]

    这个问题在这里已经有答案了 我有以下功能 我想在其中修剪我的std set
  • 添加对共享类的多个 WCF 服务的服务引用

    我正在尝试将我的 WCF Web 服务拆分为几个服务 而不是一个巨大的服务 但是 Visual Studio Silverlight 客户端 复制了两个服务共享的公共类 这是一个简单的例子来说明我的问题 在此示例中 有两个服务 两者都返回类
  • 获取两个字符串之间的公共部分c# [关闭]

    Closed 这个问题需要多问focused help closed questions 目前不接受答案 我需要的是获取两个单词之间的共同部分并获取差异 例子 场景1 word1 感言 word2 Test 将返回 公共部分Test 不同之
  • 捕获 foreach 条件中抛出的异常

    我有一个foreach在 foreach 本身的条件下循环期间中断的循环 有没有办法try catch抛出异常然后继续循环的项 这将运行几次 直到异常发生然后结束 try foreach b in bees exception is in
  • Blazor 与 Razor

    随着 Blazor 的发明 我想知道这两种语言之间是否存在显着的效率 无论是在代码创建方面还是在代码的实际编译 执行方面 https github com SteveSanderson Blazor https github com Ste
  • ASP .NET MVC,创建类似路由配置的永久链接

    我需要帮助在 MVC 网站中创建类似 URL 路由的永久链接 Slug 已设置为 www xyz com profile slug 代码为 routes MapRoute name Profile url profile slug defa
  • Guid 应包含 32 位数字和 4 个破折号

    我有一个包含 createuserwizard 控件的网站 创建帐户后 验证电子邮件及其验证 URL 将发送到用户的电子邮件地址 但是 当我进行测试运行时 单击电子邮件中的 URL 时 会出现以下错误 Guid should contain
  • 在 Xcode4 中使用 Boost

    有人设置 C Xcode4 项目来使用 Boost 吗 对于一个简单的 C 控制台应用程序 我需要在 Xcode 中设置哪些设置 Thanks 用这个来管理它 和这个
  • TextBox 焦点的 WinForms 事件?

    我想添加一个偶数TextBox当它有焦点时 我知道我可以用一个简单的方法来做到这一点textbox1 Focus并检查布尔值 但我不想那样做 我想这样做 this tGID Focus new System EventHandler thi
  • 如何在 VS 中键入时显示方法的完整文档?

    标题非常具有描述性 是否有任何扩展可以让我看到我正在输入的方法的完整文档 我想查看文档 因为我可以在对象浏览器中看到它 其中包含参数的描述和所有内容 而不仅仅是一些 摘要 当然可以选择查看所有覆盖 它可能是智能感知的一部分 或者我不知道它并
  • 为什么密码错误会导致“填充无效且无法删除”?

    我需要一些简单的字符串加密 所以我编写了以下代码 有很多 灵感 来自here http www codeproject com KB security DotNetCrypto aspx create and initialize a cr
  • 范围和临时初始化列表

    我试图将我认为是纯右值的内容传递到范围适配器闭包对象中 除非我将名称绑定到初始值设定项列表并使其成为左值 否则它不会编译 这里发生了什么 include
  • 事件日志写入错误

    很简单 我想向事件日志写入一些内容 protected override void OnStop TODO Add code here to perform any tear down necessary to stop your serv
  • 通过不同 DLL 或 EXE 中的指针或引用访问 STL 对象时发生访问冲突

    我在使用旧版 VC6 时遇到以下问题 我只是无法切换到现代编译器 因为我正在处理遗留代码库 http support microsoft com kb 172396 http support microsoft com kb 172396
  • 如何排列表格中的项目 - MVC3 视图 (Index.cshtml)

    我想使用 ASP NET MVC3 显示特定类型食品样本中存在的不同类型维生素的含量 如何在我的视图 Index cshtml 中显示它 an example 这些是我的代码 table tr th th foreach var m in
  • 通过等待任务或访问其 Exception 属性都没有观察到任务的异常

    这些是我的任务 我应该如何修改它们以防止出现此错误 我检查了其他类似的线程 但我正在使用等待并继续 那么这个错误是怎么发生的呢 通过等待任务或访问其 Exception 属性都没有观察到任务的异常 结果 未观察到的异常被终结器线程重新抛出
  • 是否有一个 C++ 库可以从 PDF 文件中提取文本,例如 PDFBox for Java? [关闭]

    Closed 此问题正在寻求书籍 工具 软件库等的推荐 不满足堆栈溢出指南 help closed questions 目前不接受答案 去年 我使用 PDFBox 在 Java 中创建了一个应用程序来获取某些 PDF 文件中的原始文本 现在
  • 为什么 Ajax.BeginForm 在 Chrome 中不起作用?

    我正在使用 c NET MVC2 并尝试创建一个 ajax 表单来调用删除数据库记录 RemoveRelation 的方法 删除记录的过程正在按预期进行 删除记录后 表单应调用一个 JavaScript 函数 从视觉效果中删除该记录 Rem
  • 如何创建向后兼容 Windows 7 的缩放和尺寸更改每显示器 DPI 感知应用程序?

    我是 WPF 和 DPI 感知 API 的新手 正在编写一个在 Windows 7 8 1 和 10 中运行的应用程序 我使用具有不同每个显示器 DPI 设置的多个显示器 并且有兴趣将我的应用程序制作为跨桌面配置尽可能兼容 我已经知道可以将

随机推荐

  • 当你没有在 ruby​​ 中指定异常类时,你会捕获哪些异常?

    当您不指定这样的异常类时 您会捕获哪些异常 begin do something rescue puts Exception end 根据我的副本Ruby 编程 1 9 不带参数的救援子句被视为具有参数StandardError 这是来自的
  • 如何在 Windows 中安装适用于 Python 3.4 的 pandas?

    根据the docs http pandas pydata org pandas docs dev install html 这应该有效 从 PyPI 安装 pandas 可以通过 PyPI 中的 pip 安装 点安装熊猫 这可能需要安装许
  • TypeScript:在事件中使用 jquery $(this)

    HTML div div
  • 对每个请求执行代码

    我希望能够对每个将数据填充到 ViewData 的请求执行一些代码 目前 我有一个基本控制器类 我的所有控制器都继承自该类 并且我重写 OnActionExecuting 并在那里执行它 我对这种方法唯一关心的是 创建新控制器的人必须继承基
  • 在事件处理程序中发送不带 XHR 的 http 请求

    如何使用 javascript 作为事件处理程序通过 post get 方法发送 http 请求 谢谢 保罗 好吧 你不想使用 Ajax 您可以使用事件处理程序来提交表单 a href send a
  • Salesforce PhoneGap iPhone 应用程序中的 oAuth2 问题(远程访问应用程序授权问题)

    我使用 PhoneGap 创建了一个 iPhone 应用程序 我遵循了本教程中的代码 构建由 Database com 提供支持的 PhoneGap 移动应用程序 http wiki developerforce com page Buil
  • Android listview - 获取自定义列表视图的文本

    我正在开发一个应用程序 在其中创建了一个自定义列表视图 列表视图xml代码如下
  • 使用 Python 实现 AutoCAD 自动化

    我对 Python 和 AutoCAD 非常陌生 所以请耐心等待 我正在尝试使用 Python 来自动化 AutoCAD 中的设计周期 到目前为止 我可以通过 Python 在 AutoCAD 中添加点和线 但我希望能够将线型更改为虚线 我
  • 安全的原子文件复制操作

    我需要将文件从一个位置复制到另一个位置 如果文件已存在于目的地 不覆盖 我需要抛出异常 或至少以某种方式识别 我可以首先使用 os path exists 检查 但极其重要的是 不能在检查和复制之间的短时间内创建文件 是否有一种内置的方法可
  • 从 XBee 接收的 pySerial 数据未正确显示

    我正在尝试让多个 XBees 作为传感器和输出设备运行 以将其样本发送到按如下方式连接的协调器 XBee 并根据指示打开和关闭这些远程 XBees 上的开关 我的这个 收到数据 问题似乎与 Stack Overflow 问题类似pySeri
  • 用于显示和编辑的 MVC 同一视图

    我有一个部分视图用于在弹出对话框中编辑人员详细信息 但他们也希望有 显示 模式 该模式禁用视图中的所有可编辑文本框 下拉列表框和链接 有人可以告诉我如何轻松实现这 不使用 JavaScript 您可以使用带有条件的相同视图来禁用编辑器 但这
  • sun.misc.Signal 的替代品

    我开始研究寻找替代方案sun misc Signal类 因为即将推出的 JDK 可能不支持它 我们目前正在开发 1 6 当我构建项目时 我得到 警告 sun misc SignalHandler 是 Sun 专有的 API 可能是 在未来版
  • 无法将类型“string”隐式转换为“System.Collections.Generic.List

    这个问题可能已经被回答了数百次 但这里是 我有这段代码 private void PopulateStringDropdownList List
  • 使用CursorLoader获取邮件导致邮件重复

    我正在尝试获取用户联系人的电子邮件 ID 为此 我使用游标加载器 有一个问题 我也收到重复的电子邮件 ID 如何删除重复的电子邮件 我应该使用原始查询 SELECT DISTINCT 而不是使用 CursorLoader 还是有其他解决方案
  • 测试初始化​​中的 EntityFramework 错误:多语句事务中不允许 CREATE DATABASE 语句

    我正在尝试构建一个快速测试 每次运行时都会删除并重新创建数据库 我有以下内容 TestClass public class PocoTest private TransactionScope transactionScope private
  • 检测程序何时打开 fifo

    我遇到一种情况 我需要检查 fifo 的另一侧是否已打开它 但是我不能使用 open 因为否则程序将开始执行操作 为什么我必须这样做 我有一个程序 监视器 来启动服务器程序 都是我创建的 监视器使用此 fifo 进行通信 因为监视器可以在服
  • 分配大的 DMA 缓冲区

    我想分配一个大的 DMA 缓冲区 大小约为 40 MB 当我使用dma alloc coherent 它失败了 我看到的是 cut here WARNING at mm page alloc c 2106 alloc pages nodem
  • CORS - Angular 和 Express 的 http OPTIONS 错误

    我正在尝试从 Angularjs 客户端向我的 API 发送 POST 我在另一个域中运行的服务器上有此配置 app use function req res next res setHeader Access Control Allow
  • 如何使用 POI 删除合并区域?

    我知道我们可以使用sheet addMergedRegion range 合并单元格 我想知道如何删除合并 我们可以使用sheet removeMergedRegion int 如果是 那么告诉我应该争论什么 合并单元格中存在的数据将会发生
  • 在 akka.net 中立即触发多个线程

    我不确定这是否与 akka net 或 TPL 更多相关 但我将使用 actor 作为示例来澄清问题 简而言之 问题是 有什么方法可以告诉 akka net 一次触发比我实际拥有的 CPU 核心更多的线程吗 这是示例代码和详细信息 我目前使