”工欲善其事,必先利其器。“—孔子《论语.录灵公》
首页 > 编程 > Go 中的 Fanin 模式

Go 中的 Fanin 模式

发布于2024-08-24
浏览:614

Fanin Pattern in Go

让我们看一下扇入模式。当我们需要将来自多个线程的相关数据汇集在一起​​时,这在 Go 中非常有用。

例如,假设您对不同的服务进行了多次 API 调用,并且需要合并结果。

这是一个非常容易实现的模式,但您确实需要注意如何处理渠道。很容易出现死锁情况。

// produce is used to simulate the different data sources
func produce(id int) chan int {
    ch := make(chan int)
    go func() {
        for i := 0; i 



这里我们使用 Produce 函数来模拟不同的源。这些源通道被发送到执行组合操作的 fanin 函数。

fanin 函数创建输出通道,然后启动一个对每个输入进行操作的 goroutine。我们使用 WaitGroup 来指示所有输入源何时组合到输出通道中。

在这个简单的示例中,主线程只是迭代输出。请注意,无法保证顺序,两个输入的值是混合的。

要提出的一个关键点是,当我们完成组合输入时,我们必须关闭输出通道。一旦通道为空,范围运算符将无限期等待。注释掉 close(output) 行,您将看到出现死锁情况。

我们如何改进这一点?请在下面给我留言。

谢谢!

这篇文章以及本系列所有文章的代码可以在这里找到

版本声明 本文转载于:https://dev.to/johnscode/fanin-pattern-in-go-5e5d?1如有侵犯,请联系[email protected]删除
最新教程 更多>
  • 如何使用PHP将斑点(图像)正确插入MySQL?
    如何使用PHP将斑点(图像)正确插入MySQL?
    essue VALUES('$this->image_id','file_get_contents($tmp_image)')";This code builds a string in PHP, but the function call ...
    编程 发布于2025-04-12
  • 如何将多种用户类型(学生,老师和管理员)重定向到Firebase应用中的各自活动?
    如何将多种用户类型(学生,老师和管理员)重定向到Firebase应用中的各自活动?
    Red: How to Redirect Multiple User Types to Respective ActivitiesUnderstanding the ProblemIn a Firebase-based voting app with three distinct user type...
    编程 发布于2025-04-12
  • 显式等待替代隐式等待,Selenium WebDriver优化指南
    显式等待替代隐式等待,Selenium WebDriver优化指南
    在selenium webdriver中进行明确等待java 理解区别隐式等待是应用于驱动程序实例的全局设置,从而定义了定位Web元素的最大等待时间。相比之下,明确的等待时间用于暂时停止执行,直到满足特定网络元素的存在或状态。 explicit等待,而显式等待可以替换单个thread.sleep...
    编程 发布于2025-04-12
  • 如何在JavaScript对象中动态设置键?
    如何在JavaScript对象中动态设置键?
    在尝试为JavaScript对象创建动态键时,如何使用此Syntax jsObj['key' i] = 'example' 1;不工作。正确的方法采用方括号: jsobj ['key''i] ='example'1; 在JavaScript中,数组是一...
    编程 发布于2025-04-12
  • 如何使用不同数量列的联合数据库表?
    如何使用不同数量列的联合数据库表?
    合并列数不同的表 当尝试合并列数不同的数据库表时,可能会遇到挑战。一种直接的方法是在列数较少的表中,为缺失的列追加空值。 例如,考虑两个表,表 A 和表 B,其中表 A 的列数多于表 B。为了合并这些表,同时处理表 B 中缺失的列,请按照以下步骤操作: 确定表 B 中缺失的列,并将它们添加到表的末...
    编程 发布于2025-04-12
  • CSS :not()选择器在Safari、Chrome和Firefox中的不同表现原因
    CSS :not()选择器在Safari、Chrome和Firefox中的不同表现原因
    问题:Safari renders the text in blue, while Chrome and Firefox use red.Cause:The root cause is Safari's recent implementation of the level 4 :not() ...
    编程 发布于2025-04-12
  • 如何从Python中的字符串中删除表情符号:固定常见错误的初学者指南?
    如何从Python中的字符串中删除表情符号:固定常见错误的初学者指南?
    从python import codecs import codecs import codecs 导入 text = codecs.decode('这狗\ u0001f602'.encode('utf-8'),'utf-8') 印刷(文字)#带有...
    编程 发布于2025-04-12
  • 哪种在JavaScript中声明多个变量的方法更可维护?
    哪种在JavaScript中声明多个变量的方法更可维护?
    在JavaScript中声明多个变量:探索两个方法在JavaScript中,开发人员经常遇到需要声明多个变量的需要。对此的两种常见方法是:在单独的行上声明每个变量: 当涉及性能时,这两种方法本质上都是等效的。但是,可维护性可能会有所不同。 第一个方法被认为更易于维护。每个声明都是其自己的语句,使其...
    编程 发布于2025-04-12
  • HTML格式标签
    HTML格式标签
    HTML 格式化元素 **HTML Formatting is a process of formatting text for better look and feel. HTML provides us ability to format text without us...
    编程 发布于2025-04-12
  • 如何将MySQL数据库添加到Visual Studio 2012中的数据源对话框中?
    如何将MySQL数据库添加到Visual Studio 2012中的数据源对话框中?
    在Visual Studio 2012 尽管已安装了MySQL Connector v.6.5.4,但无法将MySQL数据库添加到实体框架的“ DataSource对话框”中。为了解决这一问题,至关重要的是要了解MySQL连接器v.6.5.5及以后的6.6.x版本将提供MySQL的官方Visual...
    编程 发布于2025-04-12
  • \“(1)vs.(;;):编译器优化是否消除了性能差异?\”
    \“(1)vs.(;;):编译器优化是否消除了性能差异?\”
    答案: 在大多数现代编译器中,while(1)和(1)和(;;)之间没有性能差异。编译器: perl: 1 输入 - > 2 2 NextState(Main 2 -E:1)V-> 3 9 Leaveloop VK/2-> A 3 toterloop(next-> 8 last-> 9 ...
    编程 发布于2025-04-12
  • Python求阈值以下最大整数立方根方法
    Python求阈值以下最大整数立方根方法
    在此代码段中找到最大的整数cube root小于阈值该条件表示为n **(1/3)==,在其中我们要检查n是否取得n的cube root的结果是整数。但是,出现了关于如何执行此检查的问题。检查float是否是integer 的浮点不重新计算会计,请务必注意,浮点算术可以不精确。因此,在比较浮子以保...
    编程 发布于2025-04-12
  • 为什么我在Silverlight Linq查询中获得“无法找到查询模式的实现”错误?
    为什么我在Silverlight Linq查询中获得“无法找到查询模式的实现”错误?
    查询模式实现缺失:解决“无法找到”错误在Silverlight应用程序中,尝试使用LINQ建立LINQ连接以错误而实现的数据库”,无法找到查询模式的实现。”当省略LINQ名称空间或查询类型缺少IEnumerable 实现时,通常会发生此错误。 解决问题来验证该类型的质量是至关重要的。在此特定实例中...
    编程 发布于2025-04-12
  • 如何限制动态大小的父元素中元素的滚动范围?
    如何限制动态大小的父元素中元素的滚动范围?
    在交互式接口中实现垂直滚动元素的CSS高度限制问题:考虑一个布局,其中我们具有与用户垂直滚动一起移动的可滚动地图div,同时与固定的固定sidebar保持一致。但是,地图的滚动无限期扩展,超过了视口的高度,阻止用户访问页面页脚。 映射{} 因此。我们不使用jQuery的“ .aimimate(...
    编程 发布于2025-04-12
  • 如何使用Python的请求和假用户代理绕过网站块?
    如何使用Python的请求和假用户代理绕过网站块?
    如何使用Python的请求模拟浏览器行为,以及伪造的用户代理提供了一个用户 - 代理标头一个有效方法是提供有效的用户式header,以提供有效的用户 - 设置,该标题可以通过browser和Acterner Systems the equestersystermery和操作系统。通过模仿像Chro...
    编程 发布于2025-04-12

免责声明: 提供的所有资源部分来自互联网,如果有侵犯您的版权或其他权益,请说明详细缘由并提供版权或权益证明然后发到邮箱:[email protected] 我们会第一时间内为您处理。

Copyright© 2022 湘ICP备2022001581号-3