Created
March 6, 2016 12:32
-
-
Save matsu-chara/8c29266e8922372a5215 to your computer and use it in GitHub Desktop.
長時間ブロックするアクターをスレッド数(デフォルトでは物理コア数)だけ用意すると全体のパフォーマンスが落ちる例(ずっとブロックして先にいかないし、GCも効かない。env.outにも処理が行かないので表示もされない)
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
| use "collections" | |
| actor Main | |
| let env: Env | |
| new create(env': Env) => | |
| env = env' | |
| let ls = List[LightWorker] | |
| let hs = List[HeavyWorker] | |
| env.out.print("creating...") | |
| for i in Range[U32](0, 8) do | |
| ls.push(LightWorker(i, env)) | |
| hs.push(HeavyWorker(i, env)) | |
| end | |
| env.out.print("heavy work...") | |
| for h in hs.values() do | |
| h.doWork() | |
| end | |
| @sleep[None](U64(3)) | |
| env.out.print("light work...") | |
| for l in ls.values() do | |
| l.doWork() | |
| end | |
| env.out.print("done") | |
| actor HeavyWorker | |
| let env: Env | |
| let id: U32 | |
| var count: U64 = 0 | |
| new create(id': U32, env': Env) => | |
| id = id' | |
| env = env' | |
| env.out.print("heavy: " + id.string()) | |
| be doWork() => | |
| env.out.print("heavy: " + id.string() + " count = " + count.string()) | |
| while count < 1000000000 do | |
| count = count + 1 | |
| if (count % 100000000) == 0 then | |
| env.out.print("heavy: " + id.string() + " count = " + count.string()) | |
| end | |
| end | |
| actor LightWorker | |
| let env: Env | |
| let id: U32 | |
| var count: U64 = 0 | |
| new create(id': U32, env': Env) => | |
| id = id' | |
| env = env' | |
| env.out.print("light: " + id.string()) | |
| be doWork() => | |
| count = count + 1 | |
| env.out.print("light: " + id.string() + " count = " + count.string()) |
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment