现在的需求是存在一个类内的方法,原来是串行的,现在需要改并行。现在我需要将一个对象 obj ,或者对象的方法 obj.run 传入子线程,然后回调执行。

但是我尝试了几种方式,似乎是没办法将复杂的对象进行传递?以至于常规的回调函数的方式没办法在 node 的并行化中实现。

1. worker_thread

```
new Worker(moduleThreadFile,
workerData:{'obj':obj}) //ERROR
```

会报告 Cannot set property code of which has only a getter.

2. workerpool

```
pool=workerpool.pool()
pool.exec(obj,[])
```

实际上传入的 obj 在子线程中是 undefined
举报· 385 次点击
登录 注册 站外分享
20 条回复  
lmw2616 小成 2024-7-23 00:52:23
切片上传?
zhufpy 初学 2024-7-22 18:02:02
想办法序列化对象吧~,或者在通过一些参数,在 worker 里实例化对象
SenseHu 小成 2024-7-22 12:44:31
有没可能方向就错了, node 适合计算密集型任务?
kyuuseiryuu 小成 2024-7-22 10:13:28
源码级传递 —— 你在 worker 侧实现一个一摸一样的类。这样把数据丢过去就能计算了。
accelerator1 小成 2024-7-22 09:35:16
nodejs 中的 worker 是多进程,不是多线程,不能内存共享,正常情况没法传递引用。
但是 worker 支持 transferable 对象,也就是可以直接传递引用避免进程间的数据拷贝,其实还是要自己实现序列/反序列化。

如果你的 obj 不可序列化,那就把 obj 的实例化函数放到 worker 中,通过传递 obj 实例化的相关参数来实现。
image72 小成 2024-7-20 19:10:09
我看到 workerData 支持 Blob, dataview,arraybuffer 类型(The structured clone algorithm
)[https://developer.mozilla.org/en-US/docs/Web/API/Web_Workers_API/Structured_clone_algorithm#webapi_types]
mark2025 小成 2024-7-19 20:11:51
@nyxsonsleep 在 worker 内加载/初始化这个对象不行么?
nomagick 小成 2024-7-19 19:43:32
你就别当 node 有线程,node 相当于没有线程,先序列化再反序列化,多进程模型

而且 node 里面的 fork, 也不是你认为的 fork, 纯就是重新再启动一个新的
EchoWhale 小成 2024-7-19 19:32:28
别想了,自己实现一个序列化/反序列化方法吧。
momocraft 小成 2024-7-19 19:12:47
重写一份不绑定对象的,参数可以序列化的 run
12下一页
返回顶部