微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

工作线程通信协议

如何解决工作线程通信协议

我偶然发现了 NodeJS 中的工作线程,我开始研究较低级别的抽象,它们之间的相互通信和数据共享是如何工作的,尤其是用于在线程之间发送消息数据的 liftWhatever 函数

查看这行代码 postMessage,人们会猜测它使用套接字来进行通信,因为正在使用关键字 port,但我在通过命令提示搜索它们时没有发现打开的端口连接。

我想了解worker_thread机制使用的是什么通信协议?它是 TCP 还是其他一些在线程之间共享数据和消息的机制?这是基于我希望自己进行的一项研究,目的是了解在 worker_threads 之间传输大量数据的效率与使用内存共享/TCP 的子进程之间的 ICP 通信的效率。

解决方法

工人不使用任何类型的 TCP/IP 或其他进程间通信协议与他们的父母进行通信。工人之间、工人和父母之间传递的消息直接来回传递数据。 Worker 和他们的父母共享一个地址空间和 V8 实例。

.postMessage() looks like this,其中 transferList 是可选的。

port.postMessage(value,transferList)

第一个参数中的项是cloned,副本从消息的发送者传递给接收者。

第二个参数中的项目被传递而不克隆它们。只有某些数组样式的数据类型可以通过这种方式传输。发送方失去对这些项目的访问权,而接收方获得访问权。这节省了克隆时间,并且可以更快地传递像图像这样的大型数据结构。这种消息传递适用于浏览器和 nodejs 代码。

子进程可以从衍生进程到衍生进程来回传递数据。该数据通过在生成时设置的进程间通信方法进行复制和推送。在许多情况下,IPC 机制使用操作系统级管道;这些与任何 IPC 机制一样有效,尤其是在 UNIX 派生的操作系统上。子进程不与父进程共享内存,因此它们不能直接使用 transferList 所有权变更方案。

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。