Nar*_*sty 6 erlang multithreading haskell functional-programming clojure
我是函数式编程的新手.我所理解的是函数式编程是使用纯函数编写代码而不改变数据的价值.
我们不需要改变变量的值,而是在需要更新变量时在函数式编程中创建新的变量.
假设我们有一个变量x,它表示程序发出的HTTP请求总数.如果我们有两个线程,那么我希望线程在x任何线程发出HTTP请求时递增.如果两个线程都创建了变量的不同副本,x那么它们如何同步其值x.例如:如果线程1发出10个HTTP请求而线程2发出11个HTTP请求,那么它们将分别打印10和11但是我将如何打印21.
我将讨论 Haskell 部分。MVar是线程的通信机制之一。这是西蒙·马洛(Simon Marlow)书中的示例之一(该程序是不言自明的):
main = do
m <- newEmptyMVar
forkIO $ do putMVar m 'x'; putMVar m 'y'
r <- takeMVar m
print r
r <- takeMVar m
print r
Run Code Online (Sandbox Code Playgroud)
上述程序的输出将是:
'x'
'y'
Run Code Online (Sandbox Code Playgroud)
您可以在上面的示例中看到MVar变量中的值m是如何在线程之间共享的。您可以在本书中了解有关这些技术的更多信息。
| 归档时间: |
|
| 查看次数: |
371 次 |
| 最近记录: |