[Concurrency] κΈ°λ³Έκ°œλ…

λ™μ‹œμ„±μ— λŒ€ν•œ 이해와 μš©μ–΄ μŠ΅λ“μ„ μœ„ν•΄ 기본적인 κ°œλ…λ“€μ„ μ •λ¦¬ν•œλ‹€.




ν”„λ‘œμ„ΈμŠ€(Process)

λ™μ‹œμ„±μ— μžˆμ–΄μ„œ κ°€μž₯ μ€‘μš”ν•œ κΈ°λ³Έλ‹¨μœ„λŠ” μŠ€λ ˆλ“œκ°€ μ•„λ‹ˆλΌ ν”„λ‘œμ„ΈμŠ€λ‹€.
μ—¬κΈ°μ„œ λ§ν•˜λŠ” ν”„λ‘œμ„ΈμŠ€λŠ” OS의 ν”„λ‘œμ„ΈμŠ€μ™€λŠ” λ‹€λ₯΄λ‹€.

ν”„λ‘œμ„ΈμŠ€λŠ” λ‹€μŒκ³Ό 같은 μƒνƒœ 전이λ₯Ό κ°€μ§€λŠ” 일련의 μž‘μ—… λ‹¨μœ„λ₯Ό λ§ν•œλ‹€.

μ—¬κΈ°μ„œ νŠΉμ΄ν•œ 점은 μ‹€ν–‰ 쀑에 μ–Έμ œλ“  "λŒ€κΈ° μƒνƒœ"둜 μ „ν™˜λ˜μ—ˆλ‹€κ°€ λ‹€μ‹œ μ‹€ν–‰ μƒνƒœλ‘œ λŒμ•„μ˜¬ 수 μžˆλ‹€λŠ” 점이닀.

λŒ€κΈ° μƒνƒœλ‘œ μ „ν™˜λ˜λŠ” μ΄μœ μ—λŠ” I/O둜 μΈν•œ 데이터 λŒ€κΈ°, λ¦¬μ†ŒμŠ€ λΆ€μ‘±μœΌλ‘œ μΈν•œ λŒ€κΈ°, ν˜Ήμ€ 할일이 μ—†μ„λ•Œ λ¦¬μ†ŒμŠ€λ₯Ό 아끼기 μœ„ν•΄μ„œ λŒ€κΈ°ν•˜λŠ” 것 등이 μžˆλ‹€.




λ™μ‹œμ„±(Concurrency)κ³Ό 병렬성(Paralleism)

λ™μ‹œμ„±μ€ 2개 μ΄μƒμ˜ ν”„λ‘œμ„ΈμŠ€κ°€ λ™μ‹œμ— 계산 쀑인 μƒνƒœμ— μžˆλ‹€λŠ” 것을 λ‚˜νƒ€λ‚΄λŠ” μš©μ–΄λ‹€.
μ‹œλΆ„ν• μ²˜λ¦¬ 등을 톡해 λ™μ‹œμ— μ‹€ν–‰λ˜λŠ” κ²ƒμ²˜λŸΌ λ³΄μ΄λŠ” 것과, λ©€ν‹°μ½”μ–΄λ₯Ό 톡해 μ‹€μ œλ‘œ λ™μ‹œμ— μ‹€ν–‰λ˜λŠ” 것을 λͺ¨λ‘ λ™μ‹œμ„±μ΄λΌ λ§ν•œλ‹€.

병렬성도 μ˜λ―Έκ°€ 거의 μœ μ‚¬ν•΄μ„œ ν˜Όμš©λ˜λŠ” κ²½μš°κ°€ λ§Žμ€λ°, 보톡은 λ©€ν‹°μ½”μ–΄λ₯Ό 톡해 λ™μ‹œμ— μ‹€ν–‰λ˜λŠ” κ²ƒλ§Œμ„ κ°€λ¦¬ν‚¬λ•Œ 주둜 μ‚¬μš©ν•œλ‹€.
병렬성이 λ™μ‹œμ„±μ— ν¬ν•¨λ˜λŠ” κ°œλ…μ΄λΌκ³  λ³Ό 수 μžˆλ‹€.





λ³‘λ ¬μ„±μ˜ μ’…λ₯˜

병렬성이라고 λΆ€λ₯΄λŠ”κ²ƒλ„ 관점에 따라 μ’…λ₯˜κ°€ μ’€ κ°ˆλ¦°λ‹€.

1. νƒœμŠ€ν¬ 병렬성
μ—¬λŸ¬κ°œμ˜ νƒœμŠ€ν¬λ₯Ό λ™μ‹œμ— μ‹€ν–‰ν•˜λŠ” 것을 λ§ν•œλ‹€. μ—¬κΈ°μ„œ νƒœμŠ€ν¬λŠ” ν”„λ‘œμ„ΈμŠ€λ‚˜ μŠ€λ ˆλ“œμ˜ κ°œλ…κ³Ό 거의 κ°™λ‹€.
보톡 λ©€ν‹°μŠ€λ ˆλ“œλ₯Ό κ΅¬ν˜„ν•œλ‹€κ³  ν•˜λ©΄ νƒœμŠ€ν¬ 병렬성을 μ μš©ν•˜λŠ” 것이닀.

2. 데이터 병렬성
데이터λ₯Ό μ—¬λŸ¬κ°œλ‘œ λΆ„ν• ν•΄μ„œ λ³‘λ ¬λ‘œ μ²˜λ¦¬ν•˜λŠ” 방법을 λ§ν•œλ‹€.
예λ₯Ό λ“€λ©΄ κ·Έλž˜ν”½μ—°μ‚°μ—μ„œ 벑터연산을 ν•˜λŠ” 것 등이 μžˆλ‹€.

3. μΈμŠ€νŠΈλŸ­μ…˜ 레벨 병렬성
CPU의 μΈμŠ€νŠΈλŸ­μ…˜ μˆ˜μ€€μ—μ„œ 병렬화λ₯Ό μˆ˜ν–‰ν•˜λŠ” 것을 λ§ν•œλ‹€.
μ»΄ν“¨ν„°κ΅¬μ‘°λ‚˜ μ–΄μ…ˆλΈ”λ¦¬λ₯Ό λ°°μ› λ‹€λ©΄ λ“€μ—ˆμ„ νŒŒμ΄ν”„λΌμ΄λ‹(Pipelining)의 κ°œλ…κ³Ό λ™μΌν•˜λ‹€.
사싀 이건 μ»΄νŒŒμΌλŸ¬κ°€ μˆ˜ν–‰ν•˜λŠ” μ΅œμ ν™”λΌμ„œ 일반 κ°œλ°œμžκ°€ λ‹€λ£° μ˜μ—­μ€ μ•„λ‹ˆλ‹€.




λ™μ‹œμ„±μ΄ μ™œ μ€‘μš”ν•œκ°€?

λ™μ‹œμ„±μ΄ ν•„μš”ν•œ μ΄μœ λŠ” 크게 2κ°€μ§€ 정도가 μžˆμ„ 수 μžˆλ‹€.

μ²«λ²ˆμ§ΈλŠ” λΆ„ν•  처리λ₯Ό ν†΅ν•œ μ„±λŠ₯ ν–₯상이닀.
μ—¬λŸ¬κ°œμ˜ μ½”μ–΄λ₯Ό λ™μ‹œμ— ν™œμš©ν•΄μ„œ 큰 μž‘μ—…μ„ λΆ„ν• ν•΄μ„œ 보닀 λΉ λ₯΄κ²Œ μž‘μ—…μ„ μˆ˜ν–‰ν•  수 μžˆλ‹€.

λ‘λ²ˆμ§ΈλŠ” I/O둜 μΈν•œ λŒ€κΈ°μ‹œκ°„μ„ μ•„λΌλŠ” 것이닀.
I/OλŠ” 생각보닀 λ§Žμ€ λŒ€κΈ°μ‹œκ°„μ΄ λ°œμƒν•˜κ³  큰 λ‚­λΉ„κ°€ λ°œμƒν•˜λŠ” 뢀뢄이닀. ν˜„λŒ€μ˜ ν”„λ‘œκ·Έλž¨λ“€μ˜ μ„±λŠ₯ μ €ν•˜λŠ” λŒ€λΆ€λΆ„ I/Oμ—μ„œ λ°œμƒν•œλ‹€.
I/O둜 인해 λ°œμƒν•˜λŠ” λŒ€κΈ°μ‹œκ°„μ„ μ»΄ν“¨νŒ… λ¦¬μ†ŒμŠ€λ‘œ ν™œμš©ν•˜κ³  μ΅œμ ν™”ν•  수 있게 ν•΄μ£ΌλŠ” 것이 λ™μ‹œμ„± ν”„λ‘œκ·Έλž˜λ°μ΄λ‹€.