NimのThreadsを使ってみる

nim

まじ、公式わかりにくかったので、最小限の構成でThreadsを利用してみる。

基本形

# threadの関数の引数の型を指定
var thr: Thread[string]

# 引数textに渡された文字列を5回表示するだけの関数
proc threadFunc(text: string) {.thread.} =
  for i in 0..4:
    echo text

# Thread処理の開始
createThread(thr, threadFunc, "aaaaaa")

# Thread処理が終わるまで待機
joinThreads(thr)

並行処理(thread)になっているかを確認してみる

sleepを挟んで、メインプロセスを待機させ、サブスレッドで処理が実行されているかを確認してみる。

import os

# threadの関数の引数の型を指定
var thr: Thread[string]

# 1秒に一回、引数に渡された文字を1000001回表示するだけのthread用関数
proc threadFunc(text: string) {.thread.} =
  for i in 0..1000000:
    echo i, ": ", text

    # 1秒ずつ表示処理を走らせるが、メインスレッドが5秒で終わるので、途中でプロセスが落ちるはず
    sleep(1000)

# Thread処理の開始
createThread(thr, threadFunc, "aaaaaa")

# メインスレッドを5秒止める
sleep(5000)

うん、うまく処理されているっぽい