kdb中主线程和从线程之间共享数据

kdb中主线程和从线程之间共享数据,kdb,Kdb,在主线程和从线程之间共享只读数据的理想方法是什么?据我了解,有两种选择: 在main中将共享数据设置为全局变量,以便从线程可以读取它们 将共享变量作为参数传递给从属线程 从我的实验来看,即使使用大数据集,性能也几乎没有任何差异。事实上,1)的性能比2)稍差。我知道对于2),kdb将序列化并序列化参数。它对1有同样的作用吗?考虑到全局变量的大小大于特定于线程的参数,这可以解释性能下降的原因。有没有其他方法可以做到这一点 其次,因为从线程不能修改全局变量。我认为与主线程共享结果的唯一方法是返回结果。

在主线程和从线程之间共享只读数据的理想方法是什么?据我了解,有两种选择:

  • 在main中将共享数据设置为全局变量,以便从线程可以读取它们
  • 将共享变量作为参数传递给从属线程
  • 从我的实验来看,即使使用大数据集,性能也几乎没有任何差异。事实上,1)的性能比2)稍差。我知道对于2),kdb将序列化并序列化参数。它对1有同样的作用吗?考虑到全局变量的大小大于特定于线程的参数,这可以解释性能下降的原因。有没有其他方法可以做到这一点

    其次,因为从线程不能修改全局变量。我认为与主线程共享结果的唯一方法是返回结果。如果不是这样,请发表评论


    编辑:性能是根据调用peach前后的运行时间来衡量的。

    像这样通过peach将值传递给函数

    {}[v;]peach向量

    听起来不错,效果也不错,除非v很大。每个线程获得一个副本(即使v是全局的)

    因此,答案取决于您的用例。你有足够的内存吗?给定线程数,你能负担得起内存拷贝吗?如果答案是肯定的,那么你可以在没有太多不良影响的情况下这样做(记住分配会影响时间)


    出于这个原因,我更喜欢使用globals。

    好的。使用globals是否会对性能产生影响?在我的例子中,当我使用globals时,我反而看到性能下降。我的程序没有内存限制。是否可能将全局变量复制到每个线程堆?或者,从单个线程访问主线程堆中定义的全局函数会有很大的成本吗?它涉及序列化吗?没有全局文件不是mem复制的,访问全局文件应该非常快。您是如何衡量性能退化的?你们能用一个复制的例子更新你们的问题吗?我通过程序的简单运行时间进行测量,计算调用peach前后的开始时间和结束时间之差。我将尝试创建一个示例。