vis*_*vis 19 parallel-processing concurrency haskell deterministic non-deterministic
不太了解Haskell中并发性和并行性的上下文中的确定性.一些例子会有所帮助.谢谢
fuz*_*fuz 25
处理纯值时,评估顺序无关紧要.这基本上就是并行性所做的:并行地评估纯值.与纯值相反,顺序通常对具有副作用的行为很重要.同时运行操作称为并发.
举个例子,考虑两个动作putStr "foo"
和putStr "bar"
.根据评估这两个动作的顺序,输出可以是"foobar","barfoo"或其间的任何状态.输出是不确定的,因为它取决于具体的评估顺序.
作为另一个例子,考虑两个值sum [1..10]
和5 * 3
.无论评估这两者的顺序如何,它们总是会减少到相同的结果.这种决定论是你通常只能用纯值保证的.
ham*_*mar 24
并发和并行是两回事.
并发意味着您有多个线程以非确定性方式进行交互.例如,您可能有一个聊天服务器,其中每个客户端由一个线程处理.非确定性对于您尝试建模的系统至关重要.
并行性是指使用多个线程来简化程序运行.但是,最终结果应与顺序运行算法完全相同.
许多语言没有并行原语,因此必须使用并发原语(如线程和锁)来实现它.但是,这意味着程序员必须小心确保不会意外地引入不必要的非确定性或其他并发问题.对于显式并行原语像par
和pseq
许多的这些问题自行消失.
归档时间: |
|
查看次数: |
1717 次 |
最近记录: |