共享内存与 Go 通道通信

2023-12-29

Go 的口号之一是不要通过共享内存进行通信;相反,通过通信来共享内存 http://golang.org/doc/effective_go.html#concurrency.

我想知道 Go 是否允许在同一台机器上运行的两个不同的 Go 编译的二进制文件相互通信(即客户端-服务器),以及与 C++ 中的 boost::interprocess 相比,这有多快?到目前为止我看到的所有示例都仅说明了同一程序例程之间的通信。

一个简单的 Go 示例(具有单独的客户端和服务器代码)将不胜感激!


当我读到这篇文章时,我首先想到的就是 Stackless Python。 Go 中的通道让我想起了lotStackless Python,但这可能是因为(a)我使用过它以及(b)他们的语言/思想actually来自我从未接触过的。

我从未尝试过使用通道作为 IPC,但这可能是因为替代方案可能更安全。这是一些伪代码:

program1

chan = channel()
ipc = IPCManager(chan, None)
send_to_other_app(ipc.underlying_method)

chan.send("Ahoy!")

program2

chan = channel()
recv_from_other_app(underlying_method)
ipc = IPCManager(chan, underlying_method)

ahoy = chan.recv()

如果您使用传统的 IPC 方法,则可以在每一侧都有通道,将其通信封装在其之上。这导致了实施中的一些问题,我什至无法考虑如何解决,并且可能会出现一些意想不到的竞争条件。

不过,我同意;使用与 Go 通道相同的灵活性通过进程进行通信的能力将是惊人的(但我担心不稳定)。

然而,将一个简单的插座包裹在每一侧都带有通道可以让您获得几乎所有的好处。

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

共享内存与 Go 通道通信 的相关文章

  • 如何使用 golang 和 mgo 库在 mongodb 中创建文本索引?

    我正在尝试对集合进行全文搜索 但为了做到这一点 我需要创建一个文本索引 http docs mongodb org manual tutorial create text index on multiple fields http docs
  • Bash脚本无法执行Go命令

    我正在尝试编写一个 bash 脚本来自动在不同的目录中运行 go get install 相关部分在这里 cd web go get cd web go install cd services go get cd services go i
  • Google App Engine Golang 没有这样的文件或目录

    我正在用 Go 开发一个 Google App Engine 项目 并陷入了读取文件的困境 事实上 应用程序在本地运行得很好 然而 部署时 它会恐慌告诉我没有这样的文件或目录 这是我的 fileValue 方法 func fileValue
  • go 中的属性更改通知

    如何在 go 中向多个接收器发出 属性 更改信号 类似于在 Qt 中使用通知信号定义属性的方式 例如 如果您想象有一些值需要以多种方式显示 例如进度值可以同时显示为进度条和文本 当基础值发生变化时 两者都需要更新 一种方法可能是利用chan
  • 使用 EOF 在未命名管道上发出信号

    我有一个测试程序 它使用使用 pipeline 创建的无名管道在 Linux 系统上使用 fork 创建的父进程和子进程之间进行通信 通常 当发送进程关闭管道的 write fd 时 接收进程从 read 返回值为 0 表示 EOF 然而
  • Go MSSQL 连接

    如何提供 MSSQL 连接 它说它始终与代码相关 即使信息不正确 也不会报错 package main import database sql fmt github com denisenkom go mssqldb log var ser
  • Go API 在 html 中显示 swagger api 规范 (json) (Swagger UI)

    我有一个服务于特定端口的应用程序 gorilla mux 我也有一个 json 文件形式的 swagger API 规范 是否有任何 go API 可以像 spring boot 一样从 JSON 文件生成 swagger UI 定义 我正
  • GO并发编程测试

    我试图确保我的并发程序不存在以下情况 僵局 livelock 饥饿 我找到了以下工具http blog golang org race detector http blog golang org race detector 我尝试编译并运行
  • 给定方法值,获取接收者对象

    Go 有没有办法从方法值获取接收者对象 例如有没有这样的MagicFunc这将使以下程序输出字符串my info来自底层 Foo 实例 package main import fmt type Foo struct A string fun
  • Golang 按位运算以及一般字节操作

    我有一些 C 代码 可以对字节执行一些按位运算 我正在尝试在 golang 中做同样的事情 但遇到了困难 C 中的示例 byte a c byte data int j c data j c byte c j c a c 0xFF c 0x
  • 如何将未知字段类型的数据解组为 JSON

    我有这些 结构 type Results struct Gender string json gender Name struct First string json first Last string json last json nam
  • 我可以根据我正在构建的操作系统导入 Golang 包吗?

    假设我有一个基于哪个操作系统的 go 项目 在某些情况下是哪个发行版 我想使用 Systemd 客户端包 Upstart 客户端包 sysv 客户端包 launchd 客户端包 是否可以有选择地导入每个包 以便我只导入我正在构建的每个操作系
  • 在golang中获取TTFB(第一个字节的时间)值

    我正在尝试获取 TTFB 值和 Connect 值 c exec Command curl w Connect time connect TTFB time starttransfer Total time time total o dev
  • 在 Go 中使用电子邮件地址创建证书签名请求 (CSR)

    我尝试使用 crypto x509 包生成 CSR 但没有找到将 emailAddress 字段添加到其主题中的方法 根据文档证书申请 http golang org pkg crypto x509 CertificateRequest结构
  • 在 Python 中共享多处理内存的更好方法?

    我已经解决这个问题一周了 它变得非常令人沮丧 因为每次我实现一个更简单但相似规模的示例来说明我需要做的事情时 事实证明多重处理都会把它搞砸 它处理共享内存的方式让我感到困惑 因为它非常有限 很快就会变得无用 所以我的问题的基本描述是 我需要
  • Gorm 总是返回带有 nil 值的结构

    我正在使用 Gorm 构建 Go Web API 作为 Amazon RDS 中 Postgresql 数据库的 ORM 问题是 Gorm 总是返回一片结构 其值全部为零 尽管数据库已经填充了数据 切片中的结构体数量是否合适取决于LIMIT
  • Go 的范围不能超过 (类型接口 {})

    我正处于尝试将我的注意力集中在 Go 上的婴儿阶段 目前 我正在模拟一个 API 请求 该请求返回包含对象数组的 JSON 格式的字符串 我试图找出迭代每个记录并访问每个字段的最合适的方法 最终 每个字段都将写入 Excel 电子表格 但现
  • 使用覆盖率信息测试 Go 中的 os.Exit 场景 (coveralls.io/Goveralls)

    这个问题 如何在 Go 中测试 os exit 场景 https stackoverflow com questions 26225513 how to test os exit scenarios in go 以及其中得票最高的答案 列出
  • 如何在 Ubuntu 中将 Go 程序作为守护进程启动?

    在 Ubuntu 中将 Go 程序作为守护进程启动的正确方法是什么 然后我将使用 Monit 对其进行监控 我应该做这样的事情 go run myapp go 我应该考虑 Go 特有的事情吗 您应该为您的程序构建一个可执行文件 go bui
  • 在 Go/ 中创建/更新 google 驱动器权限/ [使用 api 创建电子表格但无法访问它]

    我正在尝试使用 google Drive api 和以下代码创建电子表格 但我无法访问它 update 该文件似乎不在我在这里指定的驱动器中 有人知道为什么会发生这种情况吗 update 在字段中添加了父母 但有 404 错误 说找不到文件

随机推荐

  • 为什么编译器资源管理器上的 Visual Studio 忽略异常模型设置?

    当我尝试使用 EHs标记在编译器资源管理器测试用例 https godbolt org z Md2g7J 启用 异常通过extern C 函数 VC 19 22 似乎忽略了它 因为它仍然踢出 C5039 并且实际上没有更改代码 我缺少什么
  • 如何轻松打印ascii-art文本? [关闭]

    Closed 这个问题需要多问focused help closed questions 目前不接受答案 我有一个转储大量输出的程序 并且我希望其中一些输出能够真正脱颖而出 一种方法可能是使用 ascii art 渲染重要文本 like 这
  • VS 2017 中缺少 ASP.NET Core 2 模板

    I m using VS 2017 Community Edition I ve installed NET Core 2 SDK from here 当我跑步时dotnet version我收到如下回复 但我看不到ASP NET Core
  • 为什么每次创建新视图模型时不调用视图构造函数?

    我正在将 WPF 与模型 视图 视图模型模式一起使用 我有一个 ResultsView 和 ResultsViewModel 它们的连接方式如下
  • Angular 5:装饰器中不支持函数调用

    我正在从 Angular 应用程序构建 PWA 运行时出现以下错误ng build prod ERROR in app app module ts 108 64 Error during template compile of AppMod
  • 不允许远程表值函数调用

    我怎样才能做到这一点 我正在从远程链接服务器运行表值函数 我尝试在这 4 部分命名中不添加锁定 但仍然遇到相同的错误 我使用 mssql 2008 select from 110 10 10 100 testdbname dbo ufn g
  • 如何将 Micrometer 与 @WebMvcTest 连接起来

    我正在尝试测试 Spring Boot 2 3 Controller通过 Actuator Prometheus 执行指标 WebMvcTest 不幸的是 这在 NPE 中失败了 可能是因为测试中不存在 Micrometer Prometh
  • 如何使用 Visual Studio 2015(企业版)构建 boost 版本 1.58.0

    我喜欢使用 新的 Visual Studio 2015 企业版 构建 boost 1 58 0 过去我是按以下方式进行的 从以下位置下载 boost 1 58 0www boost org http www boost org 提取文件 例
  • HTTPServletRequest.getInputStream() 总是接收空行

    客户端 public List
  • Sproutcore 和 Ember 之间的区别

    在 Ember 从 sproutcore 分叉之前 我就选择了 sproutcore 作为框架 我不确定该走哪条路 而且对碎片化造成的努力明显稀释感到有点沮丧 因为这很少会带来更好的事情 Sproutcore 2 0 现在的 Ember 的
  • NDB:对查询结果进行排序

    在 App Engine NDB 中 我正在查询具有重复属性的实体 我想按表示该属性的数组的长度对结果进行排序 我希望我能做什么 Entity query order len Entity repeatedProp 您需要添加一个ndb I
  • gcloud 命令突然根本不起作用

    All gcloud命令突然给出这个错误 错误 gcloud 加载失败 没有名为 google appengine ext 的模块 这通常表明您的 gcloud 安装或 你的Python解释器有问题 请验证以下是否是有效的 Python 2
  • 如何在 Clojure 中使用 definterface?

    Clojure 1 2 0 似乎有一个definterface形式 显然是为了创建 Java 接口 有些人建议使用它 例如 一个答案这个数字运算问题 https stackoverflow com questions 3124344 clo
  • 当 xsl 本身第一页就足够时避免第二页

    我已经找到了问题的解决方案 要感谢你们所有人 因为如果没有你们及时的解决方案和建议 这是不可能实现和解决的 非常感谢 这个问题的解决方案已经实现 非常感谢 要解决您的问题 请将以下所有内容保留在单个表中并将其添加到表标题中 参考您的 xsl
  • JavaScript 正则表达式捕获小数点的重复部分

    寻找最佳方法来获取具有可能重复的小数部分的任意数字 并发现重复部分 如果存在 最终 我需要用上划线符号 使用 css 文本装饰或 MathML mline 来装饰数字 所以我还需要知道重复开始的索引 所以我需要正则表达式来得到 或者可以在算
  • 无法将有序数据写入 Spark 中的镶木地板

    我正在使用 Apache Spark 生成镶木地板文件 我可以按日期对它们进行分区 没有任何问题 但在内部我似乎无法按正确的顺序排列数据 在处理过程中顺序似乎丢失了 这意味着镶木地板元数据不正确 具体来说 我想确保镶木地板行组反映排序顺序
  • 将回归结果输出到 R 中的数据帧中

    我想知道是否有任何命令可以将 lm 模型的结果输出到 R 中的数据帧中 就像 SAS 中的 outest 一样 有任何想法吗 我正在运行多个模型 我希望结果如下所示 Model alpha Beta Rsquared F df model0
  • 为什么 BigQuery 加载作业统计信息会返回查询信息?

    我们有一些加载作业 可以从 GCS 中获取文件 并将它们加载到 BigQuery 中进行分析 我们使用JobConfigurationLoad class https developers google com resources api
  • Android:将sqlite数据库内容加载到webview

    我有一个sqlite我有一个要加载的内容的数据库webview 如我所愿从数据库中选择并在网页视图中显示 有什么办法可以做到吗 public class TataworatYawmeeh extends Activity WebView w
  • 共享内存与 Go 通道通信

    Go 的口号之一是不要通过共享内存进行通信 相反 通过通信来共享内存 http golang org doc effective go html concurrency 我想知道 Go 是否允许在同一台机器上运行的两个不同的 Go 编译的二