Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/311.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

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
Java使用同步。。。哈斯克尔用什么?_Java_Multithreading_Haskell_Corruption - Fatal编程技术网

Java使用同步。。。哈斯克尔用什么?

Java使用同步。。。哈斯克尔用什么?,java,multithreading,haskell,corruption,Java,Multithreading,Haskell,Corruption,所以我对Haskell还很陌生,我想知道,如果在多线程Java中使用同步来防止损坏,那么在Haskell中是如何做到的?我在谷歌上只找到了无用的或过于复杂的回复 这个答案通常适用于函数式语言-不需要同步。由于函数编程中的函数没有副作用:函数接受值并返回值,因此没有可变状态。这些函数本质上是线程安全的。这个答案通常适用于函数式语言-不需要同步。由于函数编程中的函数没有副作用:函数接受值并返回值,因此没有可变状态。这样的函数本质上是线程安全的。您的问题有点含糊不清,因为可以使用多线程来实现并发或并行

所以我对Haskell还很陌生,我想知道,如果在多线程Java中使用同步来防止损坏,那么在Haskell中是如何做到的?我在谷歌上只找到了无用的或过于复杂的回复

这个答案通常适用于函数式语言-不需要同步。由于函数编程中的函数没有副作用:函数接受值并返回值,因此没有可变状态。这些函数本质上是线程安全的。

这个答案通常适用于函数式语言-不需要同步。由于函数编程中的函数没有副作用:函数接受值并返回值,因此没有可变状态。这样的函数本质上是线程安全的。

您的问题有点含糊不清,因为可以使用多线程来实现并发或并行,这是具有不同解决方案的不同问题

在这两种情况下,您都需要确保您的程序使用SMP支持编译,并使用多个RTS线程运行:请参阅GHC手册

并发性 正如其他人所指出的,同步在绝大多数代码中都不是问题,因为您将主要处理纯函数。这在任何语言中都是正确的,如果您将可变状态和依赖它的库置于武装的保护之下,那么它们会虔诚地避免可变状态,除非它被正确地包装在纯API后面。并发性是Haskell的一个亮点,因为它的语义要求纯粹。类型被用来描述不纯的操作,这样就很容易发现可能需要某种同步的代码

通常,应用程序的状态将由事务数据库支持,事务数据库将为您处理同步和持久性。如果并发应用程序没有其他状态,则根本不需要任何其他同步

在其他情况下,haskell有一个方便的实现。它允许您以命令式风格编写和编写代码,无需显式锁定,同时具有原子性并保证不会出现死锁。这是编写并发代码的万无一失(tm)方法

最后,在
base
中有一些低级原语可用:普通的旧可变引用,带有,并且可以像受互斥保护的变量一样使用

base
中也有频道,但请注意:它们是无限的

相似 这也是Haskell因其非严格语义而大放异彩的一个领域。非严格性允许您编写代码,以直截了当的方式表达您的逻辑,而不必遵循特定的求值顺序

因此,您可以从业务逻辑中单独描述。编写并行代码只是将正确的注释放在正确的位置

以下是在生产中使用的示例:


代码可以理解如下:并行工作人员将全面评估将
outputParticipant
函数映射到
零件
列表中各个项目的结果,将工作分为10个元素。

您的问题有点模棱两可,因为可以使用多线程实现并发或并行,这是具有不同解决方案的不同问题

在这两种情况下,您都需要确保您的程序使用SMP支持编译,并使用多个RTS线程运行:请参阅GHC手册

并发性 正如其他人所指出的,同步在绝大多数代码中都不是问题,因为您将主要处理纯函数。这在任何语言中都是正确的,如果您将可变状态和依赖它的库置于武装的保护之下,那么它们会虔诚地避免可变状态,除非它被正确地包装在纯API后面。并发性是Haskell的一个亮点,因为它的语义要求纯粹。类型被用来描述不纯的操作,这样就很容易发现可能需要某种同步的代码

通常,应用程序的状态将由事务数据库支持,事务数据库将为您处理同步和持久性。如果并发应用程序没有其他状态,则根本不需要任何其他同步

在其他情况下,haskell有一个方便的实现。它允许您以命令式风格编写和编写代码,无需显式锁定,同时具有原子性并保证不会出现死锁。这是编写并发代码的万无一失(tm)方法

最后,在
base
中有一些低级原语可用:普通的旧可变引用,带有,并且可以像受互斥保护的变量一样使用

base
中也有频道,但请注意:它们是无限的

相似 这也是Haskell因其非严格语义而大放异彩的一个领域。非严格性允许您编写代码,以直截了当的方式表达您的逻辑,而不必遵循特定的求值顺序

因此,您可以从业务逻辑中单独描述。编写并行代码只是将正确的注释放在正确的位置

以下是在生产中使用的示例:


代码可以理解如下:并行工作人员将全面评估将
outputParticipant
函数映射到
部分
列表中各个项目的结果,将工作分为10个元素。

<代码>在原子上有点类似于同步块<代码>在原子上有点类似于同步块..太好了,感谢您的回复。我可能还没接触过函数式编程语言b
map outputParticipant parts `using` parListChunk 10 rdeepseq
^^^^^ business logic ^^^^^^         ^^^^ eval. strategy ^^^^