Actor Model ๊ฐœ์š”

  • ๊ฐ์ฒด์ง€ํ–ฅ์˜ ํŒจํ„ด์—์„œ ๋ฉ”์†Œ๋“œ ํ˜ธ์ถœ ๋ฐฉ์‹์ด ๋น„๋™๊ธฐ๋กœ ๋ณ€๊ฒฝ๋œ ํŒจํ„ด
  • Actor๋“ค์€ ๋ชจ๋‘ Thread ๊ธฐ๋ฐ˜์œผ๋กœ ๋™์ž‘ํ•˜๋Š” ๊ฐ์ฒด์–ด์•ผ ํ•œ๋‹ค.
  • ๋˜ํ•œ Actor๋Š” ๋ฉ”์‹œ์ง€์˜ ์ „์†ก/์ˆ˜์‹ ์— ๋Œ€ํ•œ ๋™๊ธฐํ™” ๊ด€๋ฆฌ๊นŒ์ง€ ํฌํ•จํ•œ๋‹ค.
  • Actor ๋‚ด๋ถ€์—์„œ ๋™๊ธฐํ™”์— ๋Œ€ํ•œ ์ฒ˜๋ฆฌ๋ฅผ ๋ณด์žฅํ•œ๋‹ค.

Actor model์ด ํ’€๊ณ ์žํ•˜๋Š” ๋ฌธ์ œ

  • OOP๋ฅผ ์ƒ๊ฐํ•ด๋ณด์ž.

  • method call์„ ํ•˜๊ณ , ๋‚ด๋ถ€ ๊ฐœ์ฒด์˜ ์ƒํƒœ๋ฅผ ๋ณ€๊ฒฝํ•˜๋ฉด์„œ ๋™์ž‘ํ•œ๋‹ค๊ณ  ์ƒ๊ฐํ•œ๋‹ค.

  • ๊ทธ๋Ÿฐ๋ฐ ๋ณดํ†ต OOP ํ™˜๊ฒฝ์—์„œ Thread์— ๋Œ€ํ•ด ๊นŠ์€ ๊ณ ๋ฏผ์„ ํ•˜์ง€๋Š” ์•Š๋Š”๋‹ค.

  • ๋งŒ์•ฝ ์œ„ ๊ทธ๋ฆผ์„ Thread ์ ‘๊ทผ๊นŒ์ง€ ํฌํ•จํ•œ๋‹ค๋ฉด ์•„๋ž˜์™€ ๊ฐ™์€ ๊ทธ๋ฆผ์„ ๊ฐ€์งˆ์ง€๋„ ๋ชจ๋ฅธ๋‹ค.

  • ์œ„์™€ ๊ฐ™์€ ์ƒํƒœ๋Š” ๊ณต์œ  ๋ฉ”๋ชจ๋ฆฌ์— ๋™์‹œ์— ์ ‘๊ทผํ•˜๊ฒŒ ๋˜๋Š” ๋ฌธ์ œ๋ฅผ ์•ผ๊ธฐํ•œ๋‹ค.
  • lock๊ณผ ๊ฐ™์€ ์ฒ˜๋ฆฌ๋ฅผ ํ†ตํ•ด ์ž„๊ณ„ ์˜์—ญ์„ ์ฒ˜๋ฆฌํ•ด์ค˜์•ผ ํ•œ๋‹ค.

Lock์˜ ๋ฌธ์ œ

  1. Concurrency๋ฅผ ์ œํ•œํ•œ๋‹ค.
    • Thread๋ฅผ ์ผ์‹œ ์ •์ง€ํ•˜๊ณ  ๋ณต์›ํ•ด์•ผ ํ•˜๋Š”๋ฐ, ์ด๋Š” OS ์ฐจ์›์—์„œ ๋น„์‹ผ ์ž‘์—…์ด๋‹ค.
  2. Block๋œ Thread์—์„œ ์–ด๋– ํ•œ ์˜๋ฏธ์žˆ๋Š” ์ž‘์—…์„ ํ•  ์ˆ˜ ์—†๋‹ค.
  3. Deadlock์„ ์œ ๋ฐœํ•  ์ˆ˜ ์žˆ๋‹ค.

๊ธฐ์กด์˜ ๋ฐฉ์‹์˜ ๋ฌธ์ œ

  • ๊ธฐ์กด ํ™˜๊ฒฝ์—์„œ Concurrency๋ฅผ ์‚ฌ์šฉํ•˜๋ ค๋ฉด, ์–ด๋– ํ•œ ๋ฐฉ์‹์œผ๋กœ๋“  ์ž‘์—…์„ ์œ„์ž„ํ•ด์•ผ ํ•œ๋‹ค.
  • ์ด๋ฅผ Task-delegate concurrency๋ผ ํ•œ๋‹ค.
  • ์ด๋Ÿฐ ๊ฒฝ์šฐ ๋„˜์–ด๊ฐ„ ์ž‘์—…์— ๋Œ€ํ•œ Error๋ฅผ ์ž‘์—…์„ ๋„˜๊ฒจ์ค€ Thread์ชฝ์—์„œ ๋ฐ›์„ ๋ฐฉ๋„๊ฐ€ ์—†๋‹ค.
  • ์•„์˜ˆ ์–ธ์–ด ์ฐจ์›์—์„œ ์œ„์ž„๋œ ์ž‘์—…์— ๋Œ€ํ•ด์„œ๋„ Error๊นŒ์ง€ ์ฒ˜๋ฆฌ๊ฐ€๋Šฅํ•˜๋„๋ก ํ•˜๋Š” ๊ฒƒ์ด ์˜ณ๋‹ค.

Actor Model

์œ„์˜ ๋ฌธ์ œ๋กœ๋ถ€ํ„ฐ ๋‹ค์Œ์˜ ๊ฒƒ์„ ๋ชฉํ‘œ๋กœ ๋งŒ๋“ค์–ด์ง„ ๊ฒƒ์ด Actor Model์ด๋‹ค.

  1. lock์— ์˜์กดํ•˜์ง€ ์•Š๊ณ  ์บก์Šํ™”๋ฅผ ํ†ตํ•ด ๋™๊ธฐํ™” ๋ฌธ์ œ๋ฅผ ์ฒ˜๋ฆฌํ•œ๋‹ค.
  2. Cooperative Entities ๋ชจ๋ธ์„ ์‚ฌ์šฉํ•œ๋‹ค.
    • ์ „์ฒด App์ด ์„œ๋กœ์—๊ฒŒ Signal์„ ๋ณด๋‚ด๊ณ  ๊ฐ’์„ ๋ณ€๊ฒฝํ•˜๋ฉด์„œ ๋™์ž‘ํ•˜๋„๋ก ํ•จ
  3. ์šฐ๋ฆฌ๊ฐ€ ๋‹น์—ฐํ•˜๊ฒŒ ์ƒ๊ฐํ•˜๋Š” ๋ฐฉ์‹์œผ๋กœ ์ฒ˜๋ฆฌ๋˜๋„๋ก ํ•œ๋‹ค.

๊ธฐ๋ณธ ๊ตฌ์กฐ

  • MailBox: Queue
  • Message
  • Behavior: Massage์— ๋”ฐ๋ผ ํ–‰๋™ ๊ฒฐ์ • ๋ฐ ์‹คํ–‰
    • ์ž์‹ ์˜ State ๋ณ€๊ฒฝ
    • Child Actor ์ƒ์„ฑ ๋ฐ ์ œ๊ฑฐ
    • ๋‹ค๋ฅธ Actor์—๊ฒŒ ๋ฉ”์‹œ์ง€ ์ „์†ก
    • ๋“ฑ๋“ฑ
  • State: Actor์˜ ์‹คํ–‰ ์ƒํƒœ(init, ready, closed) - ์ž์‹ ๋งŒ ๋ณ€๊ฒฝ ๊ฐ€๋Šฅ

Lock, Blocking ๋Œ€์‹  message ์ „๋‹ฌ ๋ฐฉ์‹์„ ์‚ฌ์šฉ

  • ํŠน์ • ๋ฉ”์†Œ๋“œ๋ฅผ ํ˜ธ์ถœํ•˜๋Š” ๊ฒƒ์ด ์•„๋‹ˆ๊ณ , ํŠน์ • ์•กํ„ฐ์—๊ฒŒ message๋ฅผ ์ „๋‹ฌํ•œ๋‹ค.
  • ์ด ๋ฉ”์‹œ์ง€๋ฅผ ์ „๋‹ฌํ–ˆ๋‹ค๋Š” ํ–‰์œ„ ์ž์ฒด๊ฐ€ Thread ์‹คํ–‰์„ ๋งํ•˜๋Š” ๊ฒƒ์€ ์•„๋‹ˆ๋‹ค.
  • ๊ฐ Actor๋Š” ๋…๋ฆฝ์ ์œผ๋กœ ๋ฐ›์€ ๋ฉ”์‹œ์ง€๋ฅผ ์ˆ˜ํ–‰ํ•œ๋‹ค.

Error ์ฒ˜๋ฆฌ

  • Actor๋กœ ๋งŒ๋“ค๊ฒŒ ๋˜๋ฉด์„œ, ์–ด๋–ค Actor๊ฐ€ ๋‹ค๋ฅธ Actor๋ฅผ ํ˜ธ์ถœํ–ˆ๋Š”์ง€์— ๋Œ€ํ•ด ์•Œ ์ˆ˜ ์žˆ๋‹ค.
  • ๊ทธ๋Ÿฌ๋ฉด์„œ Hierachy๊ฐ€ ์ƒ๊ธฐ๊ฒŒ ๋˜๋Š”๋ฐ, ๊ทธ ๋•์— ํ•˜์œ„ Actor์˜ ์‹คํŒจ ์—ฌ๋ถ€๋ฅผ ๋ถ€๋ชจ๊ฐ€ ์•Œ์•„์ฐจ๋ฆด ์ˆ˜ ์žˆ๋‹ค.

ํšจ์šฉ

  1. lock์ด ํ•„์š”์—†๋‹ค. ๊ฐ actor๋Š” ๋…๋ฆฝ์ ์œผ๋กœ queue๋ฅผ ๊ฐ€์ง„๋‹ค.
  2. actor์˜ ์ƒํƒœ๊ฐ’์€ ํ•ด๋‹น ๊ฐ์ฒด๊ฐ€ ๊ฐ€์ง„ queue๋กœ๋ถ€ํ„ฐ ๋„˜์–ด์˜ค๋Š” ๋™์ž‘์œผ๋กœ๋งŒ ์ฒ˜๋ฆฌ๋œ๋‹ค. ๋™์‹œ์„ฑ ๋ฌธ์ œ๊ฐ€ ํ•ด๊ฒฐ๋œ๋‹ค.

์ •๋ฆฌ

  1. Message Queue๋ฅผ ๊ฐœ์ฒด ๋‚ด๋ถ€์— ๋‘์–ด ๋™๊ธฐ์  ๋ฉ”์„œ๋“œ ํ˜ธ์ถœ์ด ์•„๋‹Œ ๋น„๋™๊ธฐ์ ์œผ๋กœ ์ˆ˜ํ–‰์ด ๊ฐ€๋Šฅํ•˜๋„๋ก ๋งŒ๋“  ๊ฒƒ์ด Actor
  2. ๋‚ด๋ถ€์ ์œผ๋กœ ๋™์ž‘ ์ฃผ์ฒด(Thread)๋ฅผ ๊ฐ€์ง€๊ธฐ ๋•Œ๋ฌธ์— lock์ด ํ•„์š”์—†๋‹ค.
  3. Actor๋ผ๋ฆฌ๋Š” ์„œ๋กœ ๋ฉ”์‹œ์ง€๋ฅผ ๋ณด๋‚ด๋Š” ๋ฐฉ๋ฒ•์œผ๋กœ๋งŒ ์˜ํ–ฅ์„ ๋ฏธ์น  ์ˆ˜ ์žˆ๋‹ค. ์ง์ ‘ ๋ณ€๊ฒฝ์€ ๋ถˆ๊ฐ€ํ•˜๋‹ค.

์ดํ•ด๋ฅผ ์œ„ํ•œ ๊ทธ๋ฆผ ๋ชจ์Œ

Reference