首页 > 编程语言 > 详细

Haskell语言学习笔记(84)Concurrent

时间:2018-07-20 10:48:36      阅读:177      评论:0      收藏:0      [点我收藏+]

Control.Concurrent

Prelude> import Control.Concurrent
Prelude Control.Concurrent> 

Control.Concurrent 模块属于标准库,不需要安装。

forkIO threadDelay

  • data ThreadId
    代表线程句柄的类型。
  • forkIO :: IO () -> IO ThreadId
    创建线程返回线程句柄,在新的线程中运行所给的IO计算参数。
  • threadDelay :: Int -> IO ()
    当前线程挂起 n 微秒(百万分之一秒,10负6次方分之一秒)。

示例

haskell-simple-concurrency

module Threads where

import Control.Concurrent (forkIO, threadDelay)
import Data.Foldable (for_)

main = do
    -- Synchronously perform some work.
    printMessagesFrom "main"

    -- Fork a new thread to do some work in the background.
    forkIO (printMessagesFrom "fork")

    -- Fork another thread using an inline function!
    forkIO (do
        putStrLn "starting!"
        sleepMs 5
        putStrLn "ending!")

    -- Wait for threads to finish.
    sleepMs 10

-- A simple function that prints three messages with a little delay between them.
printMessagesFrom name = for_ [1..3] printMessage
    where printMessage i = do
            sleepMs 1
            putStrLn (name ++ " number " ++ show i)

-- A utility function - threadDelay takes microseconds, which is slightly annoying.
sleepMs n = threadDelay (n * 1000)
*Threads> main
main number 1
main number 2
main number 3
starting!
fork number 1
fork number 2
fork number 3
ending!
  • forkIO (printMessagesFrom "fork")
    forkIO (do putStrLn "starting!"; sleepMs 5; putStrLn "ending!")
    这里使用 forkIO 先后启动了两个线程:打印数字的线程和打印开始结束的线程
    打印开始结束的过程为:打印开始,然后等待 5 毫秒,最后打印结束。
  • printMessagesFrom name = for_ [1..3] printMessage
    打印数字函数一共打印三个数字
  • printMessage i = do ( sleepMs 1; putStrLn (name ++ " number " ++ show i))
    每次打印数字之前先等待 1 毫秒
  • 所以最后结果为
starting!          -- 0 millisecond
fork number 1      -- 1 millisecond
fork number 2      -- 2 milliseconds
fork number 3      -- 3 milliseconds
ending!            -- 5 milliseconds

Haskell语言学习笔记(84)Concurrent

原文:https://www.cnblogs.com/zwvista/p/9339587.html

(0)
(0)
   
举报
评论 一句话评论(0
关于我们 - 联系我们 - 留言反馈 - 联系我们:wmxa8@hotmail.com
© 2014 bubuko.com 版权所有
打开技术之扣,分享程序人生!