Thread
concurrent ๋ฅผ multithread ๋ผ๊ณ ํํํ๋ค. Thread ๋ผ๋ ๊ฒ์ squencial ํ ํ๋ก๊ทธ๋จ์ ๋งํ๋ค.
๋
ผ๋ฆฌ์ ์ผ๋ก ํ๋์ flow ํ๋์ task๋ง ์งํ์ด ๋๋ค ์ฆ single threaded program์ด๋ผ๊ณ ํ๋ค.
multithreaded program์ด๋ผ๊ณ ํ๋ฉด ์ฌ๋ฌ ๊ฐ์ ๋
ผ๋ฆฌ์ flow๊ฐ ์งํ๋๋ ์ํฉ์ ์๊ธฐํ๋ค.
ํ๋ก๊ทธ๋จ์ ์ํํ๋ ๋์ค ์ฌ๋ฌ ๊ฐ์ task๋ฅผ ์ฒ๋ฆฌํ ์ ์๋ ๊ฒ์ ์๊ธฐํ๋ค.
CPU ์ฐจ์์์ ๋ดค์ ๋๋ ํ๋๊ฐ ์คํ๋๋ ๊ฒ์ด์ง๋ง OS ์ฐจ์์์ ๋ดค์ ๋๋ Multi
Reactive system์ธ ๊ฒฝ์ฐ ์ฌ๋ฌ ๊ฐ์ system์ ๋ชจ๋ํฐ๋ง ํ ์ ์๋ ์ผ์๋ง๋ค ์ ๋ดํ๊ณ ์๋ ๊ฒ๋ค์ด ์กด์ฌ.
์๋ฅผ ๋ค์ด ์ผ์๊ฐ 10๊ฐ๊ฐ ์๋คํ๋ฉด ์ผ์ 10๊ฐ๋ฅผ ํ ์ฌ๋์ด ๊ด์ฐฐ์ ํด์ผ ํ๋ค๋ฉด ํ๋์ฉ ์ญ ๊ด์ฐฐ์ ํ๊ฒ ๋๋ค.
๋ง์ฝ ๊ด์ฐฐ์ ํ๊ณ ๋์ด๊ฐ๋๋ฐ ๋ฌธ์ ๊ฐ ๋ฐ์ํ๋๋ฐ ์ด๋ฅผ ํด๊ฒฐํ๊ธฐ ์ํด์ sequential ํ๊ธฐ ๋๋ฌธ์ ๋ฐ์์ด ๋ฆ๋ค.
ํ์ง๋ง ์ธ๋น ํ๋์ task๋ฅผ ๋ณธ๋ค๋ฉด ์ฆ๊ฐ์ ์ผ๋ก ๋ฐ์์ ์ธ ์ํ ํ ์ ์๋ค.
Disadvantage
๊ฐ๊ฐ์ Thread๋ ๋
๋ฆฝ์ ์ผ๋ก ๋์๊ฐ์ผ ํ๋ค. ๊ทธ๋ ๊ธฐ ๋๋ฌธ์ ์์๊ฐ ์กด์ฌํ๋ค๋ฉด ๊ทธ ์์๋ฅผ Control ํด์ผ ํ๋ค.
์์๋ฅผ ๋ณด์ฅํด์ผ ํ๋ค. ์์๋ก ์ด๋ฃจ์ด์ง ์ ์๋ ๋ฌธ์ ์ ์ด ์กด์ฌํ ์ ์๋ค.
Interation๊ณผ Cooperation์ ๊ฐ์ง๊ณ ์์์ฑ, ์ํธ ์์ฉ์ ํ๋ฉด์ ํด์ผ ํ๊ธฐ ๋๋ฌธ์ ๋ณต์กํ ๋ฉ์ปค๋์ฆ์ด ์ง์๋์ด์ผ ํ๋ค.
์์ ์ฑ ๋ฌธ์ (safety Problem)
-> ์ํ๊ณ์ข์ ๋ ์ฌ๋์ด ๋์์ 100๋ง์์ ์ธ์ถํ๋ฉด 200๋ง์์ ์ธ์ถํ ์ ์๋๊ฐ?
Liveness ๋ฌธ์
-> ๋๋ ๋๋ฅผ ์ํ๊ณ ๋๋ ๋๋ฅผ ์ํ๊ณ , ์๋ก์ ์กฐ๊ฑด์ด ๋๋ ๋ฌธ์ ๊ฐ ๋ฐ์ (์๋ฌด๊ฒ๋ ์ผ์ด๋ ์ ์๋ ์ํฉ)
Thread / Processes
Process ๊ฐ๋
concurrent ๋ ๊ฐ์ task๊ฐ ๋์์ ์งํ๋๊ณ ์๋ ๊ฒ์ผ๋ก ์ดํดํ ์ ์๋ค.
heavyweight ๋ฌด๊ฒ๋ค.
OS์ ์ํด ์ฌ๋ฌ ๊ฐ์ task๊ฐ ๋์์ ์งํ๋๋ค. OS์ ์ํ ์ฒ๋ฆฌ๋ ๋ณ๋์ ํ๋ก๊ทธ๋จ.. ์์
ํ๊ณ , ์นํ๊ณ ,,์ ํ๋ธ ํ๊ณ ๋ฑ๋ฑ
๊ทธ ํ๋ก๊ทธ๋จ๋ค ๋ผ๋ฆฌ ๋ฉ๋ชจ๋ฆฌ๋ฅผ ๊ณต์ ํ ํ์๋ ์๋ค. ๊ฐ๊ฐ์ ํ๋ก๊ทธ๋จ์ด OS์์ ๋ฐ๋ก ๋์๊ฐ๊ณ ์์ผ๋ฏ๋ก ๋ฉ๋ชจ๋ฆฌ
๊ณต์ ์ ๋ฉ์ปค๋์ฆ์ ์ ๊ณตํ์ง ์๋๋ค. ์ด Process ์์ ์ process๋ก pipe๋ฅผ ํตํด์ ๋ณด๋ผ ์ ์๋ ์ ๋์ ๊ณต์ ๋ ํ ์ ์๋ค.
Thread
Java Virtual Machine์์ ๋ดค์ ๋ ๋ ๊ฐ์ task๊ฐ ๋์์ ์ด๋ฃจ์ด์ง๋ ๊ฒ
JVM์ด ๊ด๋ฆฌ๋ฅผ ํ๊ณ , ํ๋์ ํ๋ก๊ทธ๋จ์ ํ๋ ์ฌ๋์ด ๋ ๊ฐ์ Task๊ฐ ๊ณต์ ํ๋ ๋ฉ๋ชจ๋ฆฌ๋ฅผ ๋๋ ๊ฒ.
ํฌ๊ฒ ํ๋์ ํ๋ก๊ทธ๋จ ์์ ์ฌ๋ฌ ๊ฐ์ task๊ฐ ์ด๋ฃจ์ด์ง๋ฉฐ ๊ณต์ฉ์ ๋ฉ๋ชจ๋ฆฌ๊ฐ ์กด์ฌํ๋ค.
๋ณ์๋ฅผ ๊ณต์ ํ๊ฑฐ๋ Object๋ฅผ ๊ณต์ ํ๋๋ก Support ํ๋ ๊ฒ.
๊ทธ๋ฌ๋ฏ๋ก Process๋ณด๋ค Resource๋ฅผ ์ ๊ฒ ๋จน๋๋ค. ๊ทธ๋ฌ๋ฏ๋ก Lightweight ๋ผ๋ ๊ฒ
Window ์์
๊ด๋ฆฌ์
ํ๋ก์ธ์ค ๋ฉ๋ด
Thread / Process
๋ฉ๋ชจ๋ฆฌ ๊ด์
Process๋ ๋ณ๋์ ๋ฉ๋ชจ๋ฆฌ ์์ญ์์ ์๋ํ๋ ๊ฒ
Thread๋ ํ ๋ฉ๋ชจ๋ฆฌ ์์ญ ์์์ ์๋ํ๋ ์ฌ๋ฌ ๊ฐ์ Task
Main Routine๊ด์
Process๋ ๊ฐ๊ฐ ๋ณ๋์ main์ ๊ฐ์ง๊ณ ์๋ ํ๋ก๊ทธ๋จ
Thread๋ ํ๋์ Main์์ subroutine์ด ์กด์ฌํ๋ ํ๋ก๊ทธ๋จ์ด๋ค.
Creation of Threads
Thread๋ผ๋ ํด๋์ค๋ฅผ ์์๋ฐ๊ฑฐ๋ Runnable ์ธํฐํ์ด์ค๋ฅผ Implements ํ๊ธฐ๋ ํ๋ค.
Extending the Thread Class
run์ด๋ผ๋ ๋ฉ์๋๋ฅผ overrideํด์ ์ฌ์ฉํ๊ฒ ๋๋ค.
To start a new thread
Instance๋ฅผ ๋ง๋ค๊ณ start๋ฅผ ์ํํ๋ค. new MyTHread.start()๋ก ์์
Simple counter
run์ ํด๋นํ๋ ๊ฒ์ด ๋ก์ง์ด๋ค. for(;;) ๋ฌดํ๋ฃจํ InterruptedException์ด ๋ฐ์ํ๋ ๊ฒฝ์ฐ์ ์์ธ ์ฒ๋ฆฌ๋ฅผ ํด์ผ ํ๋ค.
์์ธ๊ฐ ๋ฐ์ํ์ง ์๋๋ค๋ฉด ๊ณ์์ ์ผ๋ก count๋ฅผ ์ฆ๊ฐ์์ผ์ค๋ค. sleepํ๋ ์๊ฐ์ ์ง์ง ์๋ค๊ฐ ์ผ์ด๋์ ์ถ๋ ฅํ๊ณ ๋ํ๊ณ ๋ฅผ ๋ฐ๋ณตํ๋ค. Counter(0,1,33).start()๋ก ์ ์ธํ๋ค. 0์์ 1์ฉ ์ฆ๊ฐํ๋๋ฐ 0.033 ์ด์ ํด๋นํ๋ delay๋ฅผ ์ค๋ค. ๋ ๊ฐ์ Thread๊ฐ ๋์์ ์ํ๋๋ค. ์ด ๊ฒฐ๊ณผ๋ฅผ ํ๋ฉด์ ํตํด์ ๋ณด์ฌ์ฃผ๊ฒ ๋๋ค.
3๋ฐฐ ์ ๋ ๋ฆ์ ์๋๋ก -1 ๋๋ ๊ฒ๋ค์ด ์ถ๋ ฅ๋๋ค. ๋ ๊ฐ์ task๊ฐ ๋์์ ์งํ๋๋ค. main ํ๋ก๊ทธ๋จ์ ๋๋๊ฒ ๋๊ณ concurrentํ๊ณ independentํ๊ฒ ์ํ๋๋ค.
Runable interface๋ฅผ implements ํ๋ ๊ฒ
Thread๋ผ๋ ํด๋์ค๋ฅผ ์์๋ฐ์ง ๋ชปํ๋ ๊ฒฝ์ฐ๊ฐ ์๋ค๋ผ๋ ๊ฒ.
Runable Interface์๋ ๋ง์ฐฌ๊ฐ์ง๋ก run์ด๋ผ๋ ๋ฉ์๋๋ฅผ ๊ตฌํํด์ผ ํ๋ค. ๋ค๋ฅธ ํด๋์ฌ extends ํ ๋๋ Implements ํ ์ ๋ฐ์ ์๋ค.
new Thread(new MyThread()).start()
์ฝ๊ฐ์ ๋ฐฉ๋ฒ์ด ๋ค๋ฅธ๋ค.
๋์ผํ๊ฒ ๋์๊ฐ๋ ํ๋ก๊ทธ๋จ ํ์ง๋ง Runnable์ Implements ํ๋ค. ์ด๋ฒ์๋ Thread.sleep์ด๋ ๊ฒ ์ ์ธ์ ํ๋ค. ๊ทธ๋ฆฌ๊ณ start ๋ฅผ ํธ์ถํ๋ ๋ฐฉ์์ด ๋ค๋ฅด๋ค๋ ๊ฒ์ ์ ๋
ํ๋ผ๊ณ ํ์
จ์!
Controlling Threads
State ๊ฐ๋
. ์ด๋ค ์ํ์ ์๋๋. sleep์ ์ํ์ ์๋ค๊ฐ ์ํํ๋ ์ํ๋ฑ state๋ฅผ ํ์
ํด์ผ ํ๋ค.
state๋ฅผ Control ํ๋ ๊ฒ๊ณผ ์ฐ์ ์์๋ฅผ ๋ค๋ฃจ๋ ๊ฒ๋ ์์ง๋ง ์ด๋ ๋ค๋ฃจ์ง ์๊ฒ ๋ค.
New ์ํ Alive ์ํ Dead ์ํ
Runnable์ ์ค์ ๋ก ํ๋ก๊ทธ๋จ์ด ์ํ๋๋ ์ํ์ด๊ณ
Blocked๋ ๊ฒจ์ธ์ , ๋๋ฉด์ ์ํ๋ฅผ ๋งํ๋ค.
Sleeping ์ํ๊ฐ ํฐ ์๋ฏธ๋ก Blocked ์ํ๋ฅผ ๋งํ๋ค. Thread ํ๋๋ฅผ Blocked ์ํ๋ก ๋ง๋๋ ๊ฒ์ ์ฌ์ฉ์๊ฐ sleep์ด๋ผ๋ ๋ฉ์๋๋ฅผ ํตํด ๊ตฌํํ๊ณ Runnable ์ํ๋ก ๋ฐ๊พธ๊ธฐ ์ํด์ start ๋ฉ์๋๋ฅผ ์ฌ์ฉํ๋ค.
wait, notify, notifyAll ์ ๋ฉ์๋๋ ์๋ค!!
์ฌ๋ฌ ๋ฉ์๋๊ฐ ์กด์ฌํ๋ค!!
Thread Priority and Scheduling
์ฐ์ ์์๋ฅผ ์ค์ผ๋ก Control ํ ์ ์๋ค.
Thread๊ฐ Control์ ๋บ๊ธฐ๋ ์ํ๋ sleep, join, wait์ด๋ผ๋ ๋ฉ์๋๋ฅผ ์ฌ์ฉํ ๋.
time-slice ์ฌ๋ฌ ์ํ ๋๋ ํ๋ก๊ทธ๋จ๋ค์ ์๊ฐ์ ํ ๋นํ๋ค.
Safety and Liveness
safe ํ๋ค๋ ๊ฒ์ ์ผ์ด๋ ์ผ์ด ์ผ์ด๋์๋ ์๋๋ค. ์๊ธ์ 100๋ง์์ธ๋ฐ 200๋ง์์ ์ธ์ถํ๋ ๋ฒ. ใ
ใ
์ด๋ค object๊ฐ modify ํ๊ณ ์๋ ์ค๊ฐ์ ๋ค๋ฅธ ์์
์ด ๋ผ์ด๋ค์ด๋ฉด ์๋ผ๋ ๊ฒ์ด๋ค.
Single thread ์์๋ ๋ฌธ์ ๊ฐ ์๋ค. race hazard & race condition ์ ๊ฒฝ์ฐ ๋์์ ๋ฌด์์ธ๊ฐ๋ฅผ ํ๋ ค๊ณ ํ ๋ ๋ฌธ์ ๊ฐ ๋ฐ์ํ๋ค.
thread safe
state์ consistency๊ฐ ์ ์ง๋๋ ์ํฉ์ ๋งํ๋ค.
critical region
๋ ๊ฐ ์ด์์ thread๊ฐ ๋์์ ์ํ๋์ง ๋ชปํ๋ ์ํ๋ฅผ ๋งํ๋ค,
Synchronization mechanism
๋ ๊ฐ์ thread๊ฐ ๋์์ ์ํ๋ ์ ์๋๋ก ๋์์ฃผ๋ ๋ฉ์นด๋์ฆ์ ๋งํ๋ค.
Atomic operation
ํ๋์ operation์ ๊ฒฝ์ฐ atomic operation. ์ด๋ค ํจ์๊ฐ ์งํ๋ ๋ ๋ค๋ฅธ ํ๋ก์ ํธ๊ฐ ๋์์ ์งํ๋ ๋ค๋ ๊ฒ์ด ์๋ ๊ฒ์ ์ ์ ๋ก ํ์. ํน๋ณํ ์กฐ์นํ์ง ์์๋ critical region์ ๋ณด์ฅํ๋ค๋ ๊ฐ๋
(***) ๊ทธ๋ ์ง ์์ ๊ฒฝ์ฐ ๋ช
์ํด์ค์ผ ํ๋ค. - > synchronized ๋ผ๋ ๊ฒ์ ์ฌ์ฉ
synchronized void aMethod
critical retion์ ๋ณด์ฅํ๋ค๋ ๊ฒ์ ๋ช
์์ ์ผ๋ก ํํํ๋ ๊ฒ
lock
ํ๋์ Thread๋ critical region์ ๋ค์ด๊ฐ๋ฉด lock์ ํ๋๋ฐ์ ์กด์ฌํ์ง ์๋๋ค. exclusive possesion์ ํด์ผ ํ๋์ task๋ฅผ ์ํํ ์ ์๋ค. ํด๋น Thread๊ฐ critical region์ ๋ ๋๋ฉด lock์ ๋๋ ค์ฃผ๊ฒ ๋๋ค.
'๐ Major Study (Bachelor) > ๐ JAVA Programming' ์นดํ ๊ณ ๋ฆฌ์ ๋ค๋ฅธ ๊ธ
JAVA ํ๋ก๊ทธ๋๋ฐ 17.2์ฅ Reserved Keyword (0) | 2021.12.12 |
---|---|
JAVA ํ๋ก๊ทธ๋๋ฐ 17.1์ฅ Cloning (0) | 2021.12.12 |
JAVA ํ๋ก๊ทธ๋๋ฐ 15.4์ฅ (0) | 2021.12.07 |
JAVA ํ๋ก๊ทธ๋๋ฐ 15.3์ฅ (0) | 2021.12.07 |
JAVA ํ๋ก๊ทธ๋๋ฐ 15.2์ฅ (0) | 2021.12.07 |