在主线程和从线程之间共享只读数据的理想方法是什么?根据我的理解,有两种选择:
-
将共享数据设置为main中的全局变量,以便从属线程可以读取它们 .
-
将共享变量作为参数传递给从属线程 .
从我的实验来看,即使是大数据集也几乎没有任何性能差异 . 事实上,1)表现略差于2) . 我知道2),kdb将序列化和序列化参数 . 是否对1)做同样的事情?考虑到全局变量的大小比线程特定参数更大,这可以解释性能的下降 . 有替代方法吗?
其次,由于从属线程无法修改全局变量 . 我认为与主线程共享结果的唯一方法是将它们返回 . 如果不是这样,请评论 .
EDIT: Performance is measured in terms of runtime before and after call to peach.
1 回答
通过像这样的桃子将值传递给函数
{}[v;] peach vector
听起来不错,效果很好,除非v非常大 . 每个线程都获得一个副本(即使v是全局的) .
所以答案取决于你的用例 . 你有足够的内存吗?给定线程数量,你能负担得起内存副本吗?如果答案是肯定的,那么你可以做到这一点而不会产生太多不良影响(记住分配会影响时间) .
因此我更喜欢使用全局变量 .