Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/multithreading/4.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Multithreading nally freed(不会用错误的地址更新新指针,因为每个mutator将首先检查引用是否已更改位置)_Multithreading_Algorithm_Concurrency_Garbage Collection_Nonblocking - Fatal编程技术网

Multithreading nally freed(不会用错误的地址更新新指针,因为每个mutator将首先检查引用是否已更改位置)

Multithreading nally freed(不会用错误的地址更新新指针,因为每个mutator将首先检查引用是否已更改位置),multithreading,algorithm,concurrency,garbage-collection,nonblocking,Multithreading,Algorithm,Concurrency,Garbage Collection,Nonblocking,好的。有什么问题吗?这适用于什么。NET或其他什么?不,如果我不是很清楚(或不是很准确),对不起。这更普遍地适用于垃圾收集算法,该算法可以在vm或类似的环境中实现。问题是:它可能有什么缺陷?在我的例子中,我正在考虑实现一个从语言到C代码的编译器,它需要垃圾收集!Waneck您将需要某种形式的软件读取屏障。@Waneck,关于开销,不,没有那么大。您可以查看无停顿GC的原始文件/草稿。现在有了真正的实现,读取障碍是很少的指令,但实际上在每次加载之前都需要它们。你可以简化Dave Moon提出的障碍

好的。

有什么问题吗?这适用于什么。NET或其他什么?不,如果我不是很清楚(或不是很准确),对不起。这更普遍地适用于垃圾收集算法,该算法可以在vm或类似的环境中实现。问题是:它可能有什么缺陷?在我的例子中,我正在考虑实现一个从语言到C代码的编译器,它需要垃圾收集!Waneck您将需要某种形式的软件读取屏障。@Waneck,关于开销,不,没有那么大。您可以查看无停顿GC的原始文件/草稿。现在有了真正的实现,读取障碍是很少的指令,但实际上在每次加载之前都需要它们。你可以简化Dave Moon提出的障碍,博客本身也是一个优秀的创意来源……你的意思是在复制对象后,所有旧引用仍然会看到过时的版本吗?检查对象指针是否已更新会影响性能吗?谢谢!我不知道erlang的gc是如何工作的,但我想我正在寻找几乎相同的需求。问题是erlang可以实现这一点,而不需要太多问题和旋转锁,因为一切都是不可变的,所以不必担心没有最新的版本或更改指针的位置。我还得对付他们;)对Waneck说:我更愿意专注于使GC本身运行得更快。“停止世界”的GC是简单且可预测的。原则上,增量GC是朝这个方向发展的一种尝试。。。解决堆问题的另一个方法是使语言/VM本身减少对内存的贪婪。例如,在我的TIScript中有一个名为multi returns的功能。假设您需要从函数返回矩形(x,y,w,h)。在Java中,您将按如下方式执行:
rectangler=wdg.getRect();//是否创建新的矩形()…
但这样做更有效:
var(x,y,w,h)=wdg.getRect();//在堆栈上返回四个值
,不需要GC。是的,这一点您是对的,它们更安全。不过,我正在寻找两个方面,它们将从非暂停gc中受益。当然还有其他的出路,我以后甚至可能会走另一条路。但现在我似乎找不到一个好的理由说明这种算法是不好的。我认为,这项技术的真正威力在于,它永远不会暂停应用程序。不过,我考虑的是一种复制gc,而且它似乎带来的麻烦要多得多。也许Immix()行中的某些内容会更好,特别是为了避免所有指针变化的混淆(欧内斯特指出!),谢谢您的宝贵见解!不久前我问过这个问题,现在我真的看到这种处理方法有很多问题,特别是在并发标记(实际上不起作用)方面。但是回答你的问题:-我认为一个对象的所有权很容易建立,创建一个对象的线程将拥有它。如果对象是共享的,这意味着它将被标记在“外部引用”列表中,我仍然认为这是一个好主意;)-我认为,自旋锁足够快(刚好有足够的时间复制对象),不会让人望而却步。当然,对于大型对象必须特别小心,但无论如何,复制gc总是这样:)为什么复制会使全局内存带宽饱和?