[๋์์ฑ] Java Concurrency Control(asynchronous, synchronized)
๐ฏ Java Concurrency Control
Race Condition
๊ฒฝ์์ํ๋ ๋ ๊ฐ ์ด์์ ์ค๋ ๋๊ฐ ๊ณต์ ๋ฐ์ดํฐ์ ์ก์ธ์ค ํ ์ ์๊ณ , ๋์์ ๋ณ๊ฒฝ์ ํ๋ ค๊ณ ํ ๋ ๋ฐ์ํ๋ ๋ฌธ์
- Race Condition ์ผ๋ก ๋์์ ๋ค์ด์ค๋ ์์ฒญ๋ค์ด ๊ฐฑ์ ์ ๊ฐ์ ์ฝ๊ณ , ์์ ํ๋ฉด์
- ์ค์ ๊ฐฑ์ ์ด ๋๋ฝ๋๋ ํ์์ด ๋ฐ์
Series
๐น Java Asynchronous
๋์์ ๋ค์ด์ค๋ ์์ฒญ๋ค์ด ๊ฐฑ์ ์ ๊ฐ์ ์ฝ๊ณ , ์์ ํ๋ฉด์ ์ค์ ๊ฐฑ์ ์ด ๋๋ฝ
before: 100, after: 99 // ๊ฐฑ์ ์ ๊ฐ์ ์กฐํ
before: 100, after: 99
before: 100, after: 99
...
before: 95, after: 94
before: 98, after: 97
before: 100, after: 99
before: 88, after: 87
before: 92, after: 91
before: 99, after: 98
.
.
๐ ๏ธ ์ฑ๋ฅ ํ ์คํธ.
- ํ์ ์๋: 50,000
- User: 296
- Processes: 8
- Threads: 37
- Duration: 3 min
๊ฒฐ๊ณผ๋ฅผ ๋ณด๋ฉด ํ์ ์๋์ 50,000 ์ผ๋ก ์ ํํ์ง๋ง 121,933 ๊ฑด์ด ์ด๊ณผ๋ ๊ฒ์ ๋ณผ ์ ์๋ค.
๋์์ฑ ์ฒ๋ฆฌ๊ฐ ๋๊ณ ์์ง ์๋ค๋ณด๋ ๋ชจ๋ ์์ฒญ์ด ์ฑ๊ณตํ๋ ๊ฒ์ ๋ณผ ์ ์๋ค.
๐น Java Synchronized
synchronized ๋ฅผ ๋ฉ์๋ ์ ์ธ๋ถ์ ๋ถ์ฌ์ฃผ๋ฉด ํด๋น ๋ฉ์๋๋ ํ ๊ฐ์ ์ค๋ ๋๋ง ์ ๊ทผ ๊ฐ๋ฅ
ํ ๊ฐ์ ์ค๋ ๋๋ง ์ ๊ทผ ๊ฐ๋ฅํ๋๋ก ์ ํํ ์ ์์ง๋ง ํฐ ๋ฌธ์ ๊ฐ ์กด์ฌ
- (1)
@Transactional
์ฌ์ฉ ์ ํ๋ก์ ๋ฐฉ์์ AOP๊ฐ ์ ์ฉ๋์ด ํธ๋์ญ์ ์ข ๋ฃ ์ ์ ๋ค๋ฅธ ์ค๋ ๋๊ฐ ๊ฐฑ์ ๋ ์ ๊ฐ์ ์ฝ๊ฒ ๋๋ฉด ๊ฒฐ๊ตญ ์ด์ ๊ณผ ๋์ผํ ๋ฌธ์ ๊ฐ ๋ฐ์ - (2) ํ๋์ ํ๋ก์ธ์ค ์์์๋ง ๋ณด์ฅ โ ์๋ฒ๊ฐ 2๋ ์ด์์ผ ๊ฒฝ์ฐ ๊ฒฐ๊ตญ ์ฌ๋ฌ ์ค๋ ๋์์ ๋์์ ๋ฐ์ดํฐ์ ์ ๊ทผ
.
.
๐ ๏ธ ์ฑ๋ฅ ํ ์คํธ.
- ํ์ ์๋: 50,000
- User: 296
- Processes: 8
- Threads: 37
- Duration: 3 min
๊ฒฐ๊ณผ๋ฅผ ๋ณด๋ฉด ํ์ ์๋์ 50,000 ์ผ๋ก ์ ํํ์ง๋ง 49,971 ๊ฑด์ด ์ด๊ณผ๋ ๊ฒ์ ๋ณผ ์ ์๋ค.
๋ค์์ ํ๋ก์ธ์ค์์ ์์ฒญ์ด ์ฌ ๊ฒฝ์ฐ ๊ฒฐ๊ตญ ์ฌ๋ฌ ์ค๋ ๋์์ ๋์์ ๋ฐ์ดํฐ์ ์ ๊ทผํ ์ ์๋ค๋ ๊ฒ์ ๋ณผ ์ ์๋ค.
02:48 ์ดํ์๋ ๋ชจ๋ ์๋์ด 0์ผ๋ก ์กฐํ๋์ด, ์ฌ๊ณ ๋ถ์กฑ ์ค๋ฅ๊ฐ ๋ฐ์ํ๊ฒ ๋๋ค.