[Kotlin] ์Šค๋ ˆ๋“œ์™€ ์ฝ”๋ฃจํ‹ด

 ๐Ÿ’ก์Šค๋ ˆ๋“œ์™€ ์ฝ”๋ฃจํ‹ด์— ๋Œ€ํ•˜์—ฌ ๊ฐ„๋‹จํ•˜๊ฒŒ ์ •๋ฆฌํ•˜์˜€์Šต๋‹ˆ๋‹ค.

 

๊ฐœ์š”

  • Thread์™€ Coroutine์€ ๋‘˜ ๋‹ค ๋™์‹œ์„ฑ ์ฒ˜๋ฆฌ๋ฅผ ์œ„ํ•œ ๋ฐฉ๋ฒ•์ด์ง€๋งŒ, ์„œ๋กœ ๋‹ค๋ฅธ ๋ฐฉ์‹์œผ๋กœ ์ž‘์—…์„ ์ฒ˜๋ฆฌํ•ฉ๋‹ˆ๋‹ค.
  • ์•ˆ๋“œ๋กœ์ด๋“œ, ์„œ๋ฒ„ ์• ํ”Œ๋ฆฌ์ผ€์ด์…˜ ๋˜๋Š” ๋‹ค์–‘ํ•œ ๋ณ‘๋ ฌ ์ฒ˜๋ฆฌ ํ™˜๊ฒฝ์—์„œ ์ค‘์š”ํ•œ ์—ญํ• ์„ ์ˆ˜ํ–‰ํ•ฉ๋‹ˆ๋‹ค.
  • ์ด๋Š” ๋™๊ธฐ & ๋น„๋™๊ธฐ, ๋™์‹œ์„ฑ & ๋ณ‘๋ ฌ์„ฑ์˜ ๊ฐœ๋…๊ณผ ๋งค์šฐ ๋ฐ€์ ‘ํ•˜๊ฒŒ ์—ฐ๊ด€๋˜์–ด ์žˆ์Šต๋‹ˆ๋‹ค.

๋™๊ธฐ์™€ ๋น„๋™๊ธฐ(Thread & Handler)

 

๋™๊ธฐ์™€ ๋น„๋™๊ธฐ(Thread & Handler)

๐Ÿ’ก๋™๊ธฐ, ๋น„๋™๊ธฐ์˜ ์ฐจ์ด์— ๋Œ€ํ•ด์„œ ์ดํ•ดํ•˜๊ณ  ์•ˆ๋“œ๋กœ์ด๋“œ์—์„œ Thread์™€ Handler๊ฐ€ ์–ด๋–ป๊ฒŒ ๋™์ž‘ํ•˜๋Š”์ง€ ์ •๋ฆฌํ•˜์˜€์Šต๋‹ˆ๋‹ค. Synchronous vs Asynchronous๋™๊ธฐ์™€ ๋น„๋™๊ธฐ๋Š” ์ž‘์—…์˜ ์ฒ˜๋ฆฌ ๋ฐฉ์‹์„ ๋‚˜ํƒ€๋‚ด๋Š” ๊ฐœ๋…์œผ๋กœ,

jinudmjournal.tistory.com

[CS] ๋™์‹œ์„ฑ vs ๋ณ‘๋ ฌ์„ฑ

 

[CS] ๋™์‹œ์„ฑ vs ๋ณ‘๋ ฌ์„ฑ

๐Ÿ’ก๋™์‹œ์„ฑ๊ณผ ๋ณ‘๋ ฌ์„ฑ์— ๋Œ€ํ•˜์—ฌ ํ•™์Šตํ•œ ๋‚ด์šฉ์„ ๊ธฐ๋กํ•˜์˜€์Šต๋‹ˆ๋‹ค.๋™์‹œ์„ฑ(Concurrency)์—ฌ๋Ÿฌ ์ž‘์—…์„ ์‹คํ–‰ํ•  ์ˆ˜ ์žˆ๋Š” ๋Šฅ๋ ฅ์„ ์˜๋ฏธํ•˜๋ฉฐ, ์‹ค์ œ๋กœ๋Š” ํ•œ ๋ฒˆ์˜ ํ•˜๋‚˜์˜ ์ž‘์—…์„ ์ˆ˜ํ–‰ํ•˜๋”๋ผ๋„ ์ž‘์—… ๊ฐ„ ๋น ๋ฅด๊ฒŒ ์ „ํ™˜

jinudmjournal.tistory.com

Thread

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

์šด์˜์ฒด์ œ์™€ ๋ฉ€ํ‹ฐ์Šค๋ ˆ๋”ฉ

  • ์Šค๋ ˆ๋“œ๋Š” ์šด์˜์ฒด์ œ๊ฐ€ ๊ด€๋ฆฌํ•˜๊ณ  ์Šค์ผ€์ฅด๋งํ•˜๋ฉฐ, CPU์—์„œ ๊ฐ ์Šค๋ ˆ๋“œ๊ฐ€ ์‹คํ–‰๋ฉ๋‹ˆ๋‹ค.
  • ์—ฌ๋Ÿฌ ์ž‘์—…์„ ๋™์‹œ์— ์ˆ˜ํ–‰ํ•ด์•ผ ํ•  ๋•Œ OS๋Š” ์–ด๋–ค ์“ฐ๋ ˆ๋“œ ์ž‘์—…์„ ๋จผ์ € ์ˆ˜ํ–‰ํ• ์ง€, ์–ด๋–ค ์“ฐ๋ ˆ๋“œ๋ฅผ ๋” ๋งŽ์ด ์ˆ˜ํ–‰ํ•ด์•ผ ํšจ์œจ์ ์ธ ์Šค์ผ€์ฅด๋ง์„ ์ง„ํ–‰ํ•ฉ๋‹ˆ๋‹ค.
    • ์ด๋Š” ์„ ์  ์Šค์ผ€์ฅด๋ง(Preempting Scheduling)์ด๋ผ๊ณ ๋„ ํ•ฉ๋‹ˆ๋‹ค.

Context Switching

  • ์—ฌ๋Ÿฌ ์Šค๋ ˆ๋“œ๊ฐ€ ๋™์‹œ์— ์‹คํ–‰๋  ๋•Œ, ์Šค๋ ˆ๋“œ ๊ฐ„์˜ ์ „ํ™˜์ด ์ž์›์„ ๋งŽ์ด ์‚ฌ์šฉํ•˜๊ณ  ํฐ ๋น„์šฉ์„ ์†Œ๋ชจํ•ฉ๋‹ˆ๋‹ค.
  • ์ด๋Š” ๋ณ‘๋ ฌ์„ฑ์ด ์•„๋‹Œ ๋™์‹œ์„ฑ ๋ณด์žฅ ์ˆ˜๋‹จ์ด๋ฉฐ, ์šด์˜์ฒด์ œ ์ปค๋„์„ ํ†ตํ•ด ๋™์ž‘ํ•ฉ๋‹ˆ๋‹ค.

Coroutine

  • Coroutine์€ ๊ฒฝ๋Ÿ‰ ์Šค๋ ˆ๋“œ๋กœ ๋ถˆ๋ฆฌ๋ฉฐ, ์ฝ”๋“œ์˜ ๋น„๋™๊ธฐ ์‹คํ–‰์„ ์‰ฝ๊ฒŒ ์ฒ˜๋ฆฌํ•  ์ˆ˜ ์žˆ๋„๋ก ๋•๋Š” ๋™์‹œ์„ฑ ํ”„๋กœ๊ทธ๋ž˜๋ฐ ๋ฐฉ์‹์ž…๋‹ˆ๋‹ค.
  • ์Šค๋ ˆ๋“œ์™€ ๋‹ฌ๋ฆฌ ๋น„๋™๊ธฐ์ ์œผ๋กœ ์‹คํ–‰๋˜๋ฉฐ, ํ˜‘๋ ฅ์ ์œผ๋กœ ์Šค์ผ€์ฅด๋ง๋ฉ๋‹ˆ๋‹ค.
  • Coroutine์„ ์‹ค์ œ๋กœ ๋ณ‘๋ ฌ์  ์ฒ˜๋ฆฌ๋ฅผ ์ง€์›ํ•˜์ง€ ์•Š์œผ๋ฉฐ, ์ด๋Š” ๋‹จ์ผ ์ฝ”์–ด์—์„œ ํ˜‘๋ ฅ์  ๋ฉ€ํ‹ฐํƒœ์Šคํ‚น์„ ํ†ตํ•ด ๊ตฌํ˜„๋ฉ๋‹ˆ๋‹ค.

Non-blocking

  • ์ฝ”๋ฃจํ‹ด์€ Non-blocking ๋ฐฉ์‹์œผ๋กœ ์ž‘๋™ํ•˜๋ฉฐ, ์Šค๋ ˆ๋“œ๋ฅผ ์ฐจ๋‹จํ•˜์ง€ ์•Š๊ณ ๋„ ๋น„๋™๊ธฐ ์ž‘์—…์„ ์ฒ˜๋ฆฌํ•ฉ๋‹ˆ๋‹ค.

Suspension

  • ์ฝ”๋ฃจํ‹ด์€ ํ•„์š”ํ•  ๋•Œ ์ค‘๋‹จ ๋˜์—ˆ๋‹ค๊ฐ€ ๋‹ค์‹œ ์žฌ๊ฐœ๋˜๋ฉฐ, ์ด๋กœ ์ธํ•ด ์ปจํ…์ŠคํŠธ ์Šค์œ„์นญ ๋น„์šฉ์ด ๋งค์šฐ ์ ์Šต๋‹ˆ๋‹ค.
  • Programmer Switching (No - Context Switching)์„ ์ง€์›ํ•˜๋ฉฐ ํ”„๋กœ๊ทธ๋ž˜๋จธ์˜ ์ฝ”๋“œ๋กœ Switching ์ง€์ ์„ ์ง€์ •ํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.
  • No - Context Switching ํŠน์„ฑ ๋•๋ถ„์— Light - weight Thread๋กœ ๋ถˆ๋ฆฝ๋‹ˆ๋‹ค.

Coroutine Object

  • ์—ฌ๋Ÿฌ ์ž‘์—… ๊ฐ๊ฐ์— Object๋ฅผ ํ• ๋‹นํ•˜๋ฉฐ, JVM Heap์— ์ ์žฌ๋˜์–ด ์‚ฌ์šฉ๋ฉ๋‹ˆ๋‹ค.

Task 1์„ ์ˆ˜ํ–‰ํ•˜๋‹ค๊ฐ€ ๋น„๋™๊ธฐ ์ž‘์—…์œผ๋กœ Task 2๊ฐ€ ๋ฐœ์ƒํ•˜๋”๋ผ๋„ ๊ฐ™์€ Thread์—์„œ 2๊ฐ€์ง€ ์ž‘์—…์„ ๋™์‹œ์— ์ˆ˜ํ–‰ํ•  ์ˆ˜ ์žˆ๊ณ , ๋‹ค์ˆ˜์˜ Thread์—์„œ ๋‹ค์ˆ˜์˜ Coroutine์„ ํ™œ์šฉํ•˜๋Š” ๋ฐฉ์‹์œผ๋กœ ๋ณ‘๋ ฌ + ๋™์‹œ ํ”„๋กœ๊ทธ๋ž˜๋ฐ๋„ ์ง€์›์ด ๊ฐ€๋Šฅํ•ฉ๋‹ˆ๋‹ค.

์ •๋ฆฌ

  • Thread๋Š” ์šด์˜์ฒด์ œ์—์„œ ๊ด€๋ฆฌ๋˜๋ฉฐ Context Switching์„ ํ™œ์šฉํ•œ ๋™์‹œ์„ฑ๊ณผ ๋ฉ€ํ‹ฐ ์ฝ”์–ด๋ฅผ ํ™œ์šฉํ•œ ๋ณ‘๋ ฌ์„ฑ์„ ์ œ๊ณตํ•˜๋Š” ๋„๊ตฌ์ž…๋‹ˆ๋‹ค.
  • ํ•˜์ง€๋งŒ Thread๋Š” ๋ฌด๊ฒ๊ณ  ๋น„์šฉ์ด ๋งŽ์ด ์†Œ๋ชจ๋˜๋ฉฐ ๋™๊ธฐํ™” ๋ฌธ์ œ๋ฅผ ์ผ์œผํ‚ฌ ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.
  • Coroutine์€ Thread์˜ ๋Œ€์•ˆ์ด ๋  ์ˆ˜ ์—†์œผ๋ฉฐ, Thread๋ฅผ ๋‹จ์ผ ์ฝ”์–ด์—์„œ ์ž˜๊ฒŒ ์ชผ๊ฐœ์–ด ์‚ฌ์šฉํ•˜๊ธฐ ์œ„ํ•œ ๊ฐœ๋…์ž…๋‹ˆ๋‹ค.
  • ์ž‘์—…์˜ ๋‹จ์œ„๋ฅผ Object๋กœ ์ถ•์†Œํ•˜์—ฌ ๋ฉ”๋ชจ๋ฆฌ, Context Switching ๋น„์šฉ ๋‚ญ๋น„๋ฅผ ํ•  ํ•„์š”๊ฐ€ ์—†์Šต๋‹ˆ๋‹ค.
  • ์ฝ”๋ฃจํ‹ด์„ ํ™œ์šฉํ•˜๋ฉด ํ”„๋กœ๊ทธ๋ž˜๋จธ์˜ ๋ชฉ์ ๊ณผ ์˜๋„๋Œ€๋กœ ํšจ์œจ์ ์ธ ๋™์‹œ์„ฑ ํ”„๋กœ๊ทธ๋ž˜๋ฐ์„ ๋ณด์žฅํ•ฉ๋‹ˆ๋‹ค.

์ฐธ๊ณ 

๐Ÿค” Thread vs Coroutine ์ „๊ฒฉ ๋น„๊ต