๋ณธ๋ฌธ ๋ฐ”๋กœ๊ฐ€๊ธฐ

๐Ÿง Study/MultiThread

[06~08์ฃผ์ฐจ] Non-Blocking ์•Œ๊ณ ๋ฆฌ์ฆ˜ - LIST ํฌ์ŠคํŠธ ์ธ๋„ค์ผ
[06~08์ฃผ์ฐจ] Non-Blocking ์•Œ๊ณ ๋ฆฌ์ฆ˜ - LIST
๐Ÿง Study/MultiThreadยท2024. 4. 25.
- SET : ์•„์ดํ…œ์˜ ์ค‘๋ณต์„ ํ—ˆ์šฉํ•˜์ง€ ์•Š์Œ : ์ •๋ ฌ๋˜์–ด ์ €์žฅ๋จ (unordered_set์ด ์•„๋‹˜) - ๊ฒ€์ƒ‰ ํšจ์œจ ์ฆ๊ฐ€ : ์‚ฝ์ž… ์‚ญ์ œ์˜ ํšจ์œจ์„ฑ์„ ์œ„ํ•ด ๋งํฌ๋“œ๋ฆฌ์ŠคํŠธ ๊ตฌํ˜„ : ๊ตฌํ˜„ ) add, remove, contains : ํ•„๋“œ ) ๋ฆฌ์ŠคํŠธ์— ์ €์žฅ๋˜๋Š” ๊ฐ’  : ๋ฉ”์„œ๋“œ - add(x) : ์ง‘ํ•ฉ์— x์ถ”๊ฐ€, ์„ฑ๊ณต ์‹œ true - remove(x) : ์ง‘ํ•ฉ์—์„œ x ์ œ๊ฑฐ, ์„ฑ๊ณต ์‹œ true - contains(x) : ์ง‘ํ•ฉ์— x๊ฐ€ ์žˆ๋‹ค๋ฉด true  : ์ถ”๊ฐ€ ๊ตฌํ˜„ ) ๋ณด์ดˆ ๋…ธ๋“œ - ๊ฒ€์ƒ‰ ํšจ์œจ์„ ์œ„ํ•ด ํ•ญ์ƒ ์กด์žฌํ•˜๋Š” Head(MAXINT)์™€ Tail๋…ธ๋“œ(-MAXINT)๋ฅผ ๊ฐ–๋„๋ก ํ•จ   - ์„ฑ๊ธด ๋™๊ธฐํ™” : ๋ฆฌ์ŠคํŠธ๋Š” ํ•˜๋‚˜์˜ ์ž ๊ธˆ์„ ๊ฐ€์ง : ๋ชจ๋“  ๋งค์„œ๋“œ ํ˜ธ์ถœ์€ ์ด ์ž ๊ธˆ์„ ํ†ตํ•ด Critical Section์œผ๋กœ ์ง„ํ–‰๋จ ( = ..
[05์ฃผ์ฐจ] ๋™๊ธฐํ™” ์—ฐ์‚ฐ & CAS ํฌ์ŠคํŠธ ์ธ๋„ค์ผ
[05์ฃผ์ฐจ] ๋™๊ธฐํ™” ์—ฐ์‚ฐ & CAS
๐Ÿง Study/MultiThreadยท2024. 4. 24.
- Lock-free ์ž๋ฃŒ๊ตฌ์กฐ : ์—ฌ๋Ÿฌ ๊ฐœ์˜ ์“ฐ๋ ˆ๋“œ์—์„œ ๋™์‹œ์— ํ˜ธ์ถœํ–ˆ์„ ๋•Œ์—๋„ ์ •ํ•ด์ง„ ๋‹จ์œ„ ์‹œ๊ฐ„๋งˆ๋‹ค ์ ์–ด๋„ ํ•œ ๊ฐœ์˜ ํ˜ธ์ถœ์ด ์™„๋ฃŒ๋˜๋Š” ์•Œ๊ณ ๋ฆฌ์ฆ˜  : Non-blocking์ด ๋ณด์žฅ๋˜์–ด์•ผ ํ•จ : ์•Œ๊ณ ๋ฆฌ์ฆ˜ ๋‚ด์— Lock์ด ์žˆ์œผ๋ฉด ๋‹น์—ฐํžˆ Lock-free X, Lock์ด ์—†๋‹ค๊ณ  ํ•ด๋„ ๋ฌด์กฐ๊ฑด Lock-free์ธ ๊ฒƒ์€ ์•„๋‹˜ : Lock์ด ์กด์žฌํ•˜๋Š” ๊ฒฝ์šฐ ๋‹ค๋ฅธ ์“ฐ๋ ˆ๋“œ๋ฅผ ์‹คํ–‰ํ•  ์ˆ˜ ์—†์–ด ์‹ฑ๊ธ€ ์“ฐ๋ ˆ๋“œ์™€ ๋‹ค๋ฅผ ๋ฐ”๊ฐ€ ์—†์Œ     → wait-free๋ฅผ ์œ ์ง€ํ•˜๋ฉฐ, ๋ฉ”๋ชจ๋ฆฌ๋กœ Atomic Memory๋ฅผ ๋งŒ๋“ค ์ˆ˜ ์žˆ๋Š” ์•Œ๊ณ ๋ฆฌ์ฆ˜ ์กด์žฌ? : ์กด์žฌ, ์ด ๊ฐ•์˜์—์„œ ์ƒ๋žต.  → wait-free๋ฅผ ์œ ์ง€ํ•˜๋ฉฐ, ๊ธฐ์กด ์”ฝ๊ธ€ ์Šค๋ ˆ๋“œ ์ž๋ฃŒ๊ตฌ์กฐ๋„ Atomic Memory๋ฅผ ์‚ฌ์šฉํ•ด ๋ฉ€ํ‹ฐ์“ฐ๋ ˆ๋“œ ์ž๋ฃŒ๊ตฌ์กฐ๋กœ ๋ณ€ํ™˜ ๊ฐ€๋Šฅ? : ๋ถˆ๊ฐ€๋Šฅํ•˜๋‹ค..
[04์ฃผ์ฐจ] ๋ฉ”๋ชจ๋ฆฌ ์ผ๊ด€์„ฑ ํฌ์ŠคํŠธ ์ธ๋„ค์ผ
[04์ฃผ์ฐจ] ๋ฉ”๋ชจ๋ฆฌ ์ผ๊ด€์„ฑ
๐Ÿง Study/MultiThreadยท2024. 4. 18.
- CPU ์ฃผ์˜์  : ์ €๋ฒˆ ์‹œ๊ฐ„ ์ƒํ˜ธ ๋ฐฐ์ œ์— ์ด์–ด ๋ฉ”๋ชจ๋ฆฌ ์ผ๊ด€์„ฑ ๋ฌธ์ œ๋„ ๊ณ ๋ คํ•ด์•ผ ํ•จ : ์ง€๊ธˆ๊นŒ์ง€ ํ”„๋กœ๊ทธ๋žจ์€ ๊ณต์œ  ๋ฉ”๋ชจ๋ฆฌ์— ๋Œ€ํ•œ ์ ‘๊ทผ(์ฝ๊ธฐ/์“ฐ๊ธฐ)์„ atomicํ•˜๋‹ค๊ณ  ๊ฐ€์ •ํ•จ → ์ปดํŒŒ์ผ๋Ÿฌ๊ฐ€ ์ œ๋Œ€๋กœ ๊ธฐ๊ณ„์–ด๋กœ ๋ฒˆ์—ญํ–ˆ๋‹ค๋ฉด → atomic : ๋ฉ”๋ชจ๋ฆฌ์˜ ์ ‘๊ทผ์ด ์ˆœ๊ฐ„์ ์œผ๋กœ ํ–‰ํ•ด์ง€๋ฉฐ, ์„œ๋กœ ๊ฒน์น˜์ง€ ์•Š๊ณ  ์‹คํ–‰ ๊ฒฐ๊ณผ ์ˆœ์„œ๊ฐ€ ์ •ํ•ด์ง€๋ฉด, ๋ชจ๋“  ์“ฐ๋ ˆ๋“œ์—์„œ ๊ฐ™์€ ์ˆœ์„œ๋กœ ๋ณด์ž„ → ๊ทธ๋Ÿฌ๋‚˜ PC์—์„œ์˜ ๋ฉ”๋ชจ๋ฆฌ ์ ‘๊ทผ์€ atomic์ด ์•„๋‹˜ (๋ฉ”๋ชจ๋ฆฌ์— ์“ด ์ˆœ์„œ๋Œ€๋กœ ๋ฉ”๋ชจ๋ฆฌ์˜ ๋‚ด์šฉ์ด ๊ด€์ธก๋˜์ง€ ์•Š์Œ)   : 0๋ฒˆ ์“ฐ๋ ˆ๋“œ๋„ false๋ฅผ ์ฝ๊ณ  1๋ฒˆ๋„ false๋ฅผ ์ฝ์Œ  : ์ €๋ฒˆ ์‹œ๊ฐ„์— ํ–ˆ๋˜ ํ”ผํ„ฐ์Šจ ์•Œ๊ณ ๋ฆฌ์ฆ˜์—์„œ std::atomic_thread_fence(std::memory_order_seq_cst)๋ฅผ ์ œ์™ธํ•œ ๊ฒฝ์šฐ ์•„๋ž˜์˜ ๊ฒฐ๊ณผ์ฒ˜๋Ÿผ..
[02์ฃผ์ฐจ] ๋ฉ€ํ‹ฐ์ฝ”์–ด HW & DataRace ํฌ์ŠคํŠธ ์ธ๋„ค์ผ
[02์ฃผ์ฐจ] ๋ฉ€ํ‹ฐ์ฝ”์–ด HW & DataRace
๐Ÿง Study/MultiThreadยท2024. 4. 18.
- ๋ฉ€ํ‹ฐ์“ฐ๋ ˆ๋“œ ํ”„๋กœ๊ทธ๋ž˜๋ฐ ์ฃผ์š” ์‚ฌํ•ญ  : ์˜ฌ๋ฐ”๋ฅธ ๊ฒฐ๊ณผ๊ฐ€ ๋‚˜์™€์•ผ ํ•จ ( ๋ฌดํ•œ๋ฃจํ”„์— ๋น ์ง€๊ฑฐ๋‚˜, ํ”„๋กœ๊ทธ๋žจ์ด ์˜ค๋ฅ˜๋กœ ์ข…๋ฅ˜๋˜๋ฉด ์•ˆ๋จ ) : ์ด๋ฅผ ์‚ฌ์šฉํ•œ ์„ฑ๋Šฅํ–ฅ์ƒ์ด ์ปค์•ผํ•จ ( ์ ์œผ๋ฉด ๋ฉ€ํ‹ฐ์“ฐ๋ ˆ๋“œ๋ฅผ ์“ฐ๋Š” ์ด์œ ๊ฐ€ ์—†์Œ ) : ๋ฉ€์“ฐ ํ”„๋กœ๊ทธ๋ž˜๋ฐ์€ ํ•˜๋‚˜์˜ ํ”„๋กœ๊ทธ๋žจ์„ ๋‚˜๋ˆ ์„œ ์ž‘์„ฑํ•˜๋Š” ๊ฒƒ   - ์œ„์—์„œ ํ‹€๋ฆฐ ๊ฒฐ๊ณผ๊ฐ€ ๋‚˜์˜จ ์ด์œ  : Data Race -> sum += 2 : ๊ณต์œ  ๋ฉ”๋ชจ๋ฆฌ๋ฅผ ์—ฌ๋Ÿฌ ์“ฐ๋ ˆ๋“œ์—์„œ ์ฝ๊ณ  ์“ฐ๊ณ , ์ด ์ˆœ์„œ์— ๋”ฐ๋ผ ์‹คํ–‰ ๊ฒฐ๊ณผ๊ฐ€ ์˜ˆ์ƒ๊ณผ๋Š” ๋‹ฌ๋ผ์ง„๋‹ค : Data Race  ⇒ ๋ณต์ˆ˜์˜ ์“ฐ๋ ˆ๋“œ๊ฐ€ ํ•˜๋‚˜์˜ ๋ฉ”๋ชจ๋ฆฌ์— ๋™์‹œ์— ์ ‘๊ทผ & ์ ์–ด๋„ ํ•œ ๊ฐœ์˜ write  : ์ฝ๊ณ  - ๋”ํ•˜๊ณ  - ์“ฐ๋Š” ์ด ์‚ฌ์ด์— context switching์ด ์ผ์–ด๋‚˜์„œ ๋ฌธ์ œ  (๋™์‹œ ์ ‘๊ทผ -> read, write) โ”€ ์•ž์˜ ํ”„..
[01์ฃผ์ฐจB] ๋ฉ€ํ‹ฐ์ฝ”์–ด HW & ๋ฉ€ํ‹ฐ์“ฐ๋ ˆ๋“œํ”„๋กœ๊ทธ๋ž˜๋ฐ ์‹œ์ž‘
๐Ÿง Study/MultiThreadยท2024. 3. 28.
- ๋ฉ€ํ‹ฐ์“ฐ๋ ˆ๋“œ ์‚ฌ์šฉ ๋ชฉ์  => ๋ณ‘๋ ฌ ์ปดํ“จํ„ฐ์—์„œ์˜ ํ”„๋กœ๊ทธ๋žจ ์„ฑ๋Šฅ ํ–ฅ์ƒ : ๋ฉ€ํ‹ฐ ์ฝ”์–ด CPU์—์„œ์˜ ํ”„๋กœ๊ทธ๋žจ ์„ฑ๋Šฅ ํ–ฅ์ƒ : ๋ฉ€ํ‹ฐ CPU ์ปดํ“จํ„ฐ์—์„œ์˜ ํ”„๋กœ๊ทธ๋žจ ์„ฑ๋Šฅ ํ–ฅ์ƒ : ๋ถ„์‚ฐ ์ปดํ“จํ„ฐ, ์‹ฑ๊ธ€ ์ฝ”์–ด ํ™˜๊ฒฝ์—์„œ์˜ ์„ฑ๋Šฅ ํ–ฅ์ƒ X, ๋ชจ๋“ˆํ™”ํ•ด์„œ ์‰ฝ๊ฒŒ ์•Œ์•„๋ณด๊ธฐ X   - ๋ฉ€ํ‹ฐ์ฝ”์–ด CPU : ํ•œ ๊ฐœ ์ด์ƒ์˜ ์ฝ”์–ด๋กœ ๊ตฌ์„ฑ๋œ CPU : ํ˜„์žฌ ์‹ฑ๊ธ€ ์ฝ”์–ด CPU๋Š” ์—†๋‹ค๊ณ  ๋ด๋„ ๋ฌด๋ฐฉ : ์ฝ”์–ด = ALU + Register + CU + Cache    ⇒ ๊ทธ๋ƒฅ CPU์™€ ๊ฐ™์Œ : ๋ฉ€ํ‹ฐ์ฝ”์–ด CPU ⇒ ํ•˜๋‚˜์˜ ์นฉ์— ์—ฌ๋Ÿฌ ๊ฐœ์˜ ํ”„๋กœ์„ธ์„œ๋ฅผ ํฌ์žฅํ•ด ๋„ฃ์Œ ( ํ”„๋กœ๊ทธ๋ž˜๋จธ ์ž…์žฅ : ๋ฉ€ํ‹ฐ ํ”„๋กœ์„ธ์„œ์™€ ๊ฐ™์Œ) : 6 Core(Quad Core) ๋Œ€์„ธ : ์•ž์œผ๋กœ ๋”์šฑ ๋งŽ์€ Core ์‚ฌ์šฉํ•˜๊ฒŒ ๋  ๊ฒƒ -> ๊ธฐ์กด ํ”„๋กœ๊ทธ๋žจ์„ Du..
๋ชฉ์ฐจ