Item 48. Parallel Stream
์คํธ๋ฆผ ๋ณ๋ ฌํ๋ ์ฃผ์ํด์ ์ ์ฉํ๋ผ
์๋ฐ๋ ๋์์ฑ ํ๋ก๊ทธ๋๋ฐ์ ์์ด ๋ง์ด ์ง์๋๋ ํธ์ธ๋ฐ, ์คํธ๋ฆผ ์ญ์ parallel()
๋ฉ์๋๋ฅผ ํตํด ๋ณ๋ ฌํ๋ฅผ ์ง์ํ๋ค.
ํด๋น ๋ฉ์๋ ํ ๋ฒ ํธ์ถํ๋ฉด ์คํธ๋ฆผ์ ๋ชจ๋ ์ฐ์ฐ์ด ๋ณ๋ ฌ๋ก ์ํ๋์ง๋ง, ์ฌ๋ฐ๋ฅด๊ณ ๋น ๋ฅด๊ฒ ๋์ํ๋๋ก ๋ณด์ฅํ๊ธฐ ์ํด์ ๋ช ๊ฐ์ง ์ฃผ์์ฌํญ์ด ์๋ค.
์ ์ฝ๋์์ parallel()
๋ฉ์๋๋ฅผ ์ฃผ์ ์ฒ๋ฆฌํ๊ณ ์คํํ๋ฉด 10์ด ๋ด์ธ๋ก ์๋ฃ๋์ง๋ง, ์ฃผ์์ ํด์ ํ๊ณ ์คํํ๋ฉด ๊ฒฐ๊ณผ๊ฐ ๋์ค์ง ์๊ณ ์ฐ์ฐ๋ง ๊ณ์ ์งํ๋๋ค.
ํด๋น ์์ธ์ ์ด ํ์ดํ๋ผ์ธ์ ๋ณ๋ ฌํํ๋ ๋ฐฉ๋ฒ์ ์ฐพ์๋ด์ง ๋ชป ํ๊ธฐ ๋๋ฌธ์ธ๋ฐ, ๊ทธ ์์ธ์ limit()
๋ฉ์๋์ ์๋ค.
๋ณ๋ ฌํ๋ limit์ ๋ค๋ฃฐ ๋ CPU ์ฝ์ด๊ฐ ๋จ์ผ๋ฉด ์์๋ฅผ ๋ ์ฒ๋ฆฌํ ๋ค ๊ฒฐ๊ณผ๋ฅผ ๋ฒ๋ฆฌ๋ ๋ฐฉ์์ผ๋ก ์ฒ๋ฆฌํ๋ค.
ํ์ง๋ง ์ ์ฝ๋๋ ์๋กญ๊ฒ ๋ฉ๋ฅด์ผ ์์๋ฅผ ์ฐพ์ ๋๋ง๋ค ๊ทธ ์ ์์๋ฅผ ์ฐพ์ ๋๋ณด๋ค ํจ์ฌ ์ค๋ ์๊ฐ์ด ๊ฑธ๋ฆฐ๋ค.(์๋ก์ด ์์ ํ๋๊ฐ ๊ทธ ์ด์ ๊น์ง ์ฒ๋ฆฌํ ์๊ฐ๋ณด๋ค ์ค๋ ๊ฑธ๋ฆผ)
๋ฐ๋ผ์ ๋ณ๋ ฌํ๋ฅผ ์ ์ฉํ๋ฉด ๋ฌดํ ์คํธ๋ฆผ์ด ๋์ด๋ฒ๋ฆฌ๊ณ , ๊ฒฐ๊ณผ๋ฅผ ๋ด์ง ๋ชปํ๊ณ ๋๋๋ฒ๋ฆฐ๋ค.
20๋ฒ์งธ ์ฐ์ฐ์ ์ํํ๋ ์์ ์ ๋จ๋ ์ฝ์ด๊ฐ ์๊ฒจ 21,22,23 .. ์ฐ์ฐ์ ์์ํด๋ฒ๋ฆฌ์ง๋ง ๊ทธ ์๊ฐ์ ํจ์ฌ ์ค๋ ๊ฑธ๋ฆฌ๊ฒ ๋๋ค.
๋ณ๋ ฌ ์ฒ๋ฆฌ ์ํฅ ์์
๋์ฒด๋ก ์คํธ๋ฆผ ์์ค๊ฐ ArrayList
, HashMap
, HashSet
, ConcurrentHashMap
์ ์ธ์คํด์ค๊ฑฐ๋ ๋ฐฐ์ด, int ๋ฒ์, long ๋ฒ์์ผ ๋ ๋ณ๋ ฌํ์ ํจ๊ณผ๊ฐ ๊ฐ์ฅ ์ข๋ค.
์ด๋ฌํ ์๋ฃ๊ตฌ์กฐ๋ค์ ๋ฐ์ดํฐ๋ฅผ ์ํ๋ ํฌ๊ธฐ๋ก ์ ํํ๊ณ ์์ฝ๊ฒ ๋๋ ์ ์์ด ๋ค์์ ์ค๋ ๋ ๋ถ๋ฐฐ๊ฐ ์ฝ๊ธฐ ๋๋ฌธ์ด๋ค.
์ฐธ์กฐ ์ง์ญ์ฑ(Locality of Reference)
๋น ๋ฅธ ๋ณ๋ ฌ ์ฒ๋ฆฌ๋ฅผ ์ํด์๋ ์ฐธ์กฐ ์ง์ญ์ฑ์ด ๋ฐ์ด๋์ผ ํ๋ค.(์ด์ํ ์์์ ์ฐธ์กฐ๋ค์ด ๋ฉ๋ชจ๋ฆฌ์ ์ฐ์ํด์ ์ ์ฅ๋์ด ์์ด์ผ ํจ) ๋ง์ฝ ์ฐธ์กฐ๋ค์ด ๊ฐ๋ฆฌํค๋ ๊ฐ์ฒด๋ค์ด ์๋ก ๋จ์ด์ ธ ์๋ค๋ฉด(์ฐธ์กฐ ์ง์ญ์ฑ์ด ๋ฎ์ผ๋ฉด) ๋ฐ์ดํฐ๊ฐ ์ฃผ ๋ฉ๋ชจ๋ฆฌ์์ ์บ์ ๋ฉ๋ชจ๋ฆฌ๋ก ์ ์ก๋๋ ์๊ฐ์ ๋๊ธฐํ๊ฒ ๋๊ณ , ์ด๋ ๋ณ๋ ฌํ์ ํจ๊ณผ๋ฅผ ๋จ์ด๋จ๋ฆฐ๋ค.
์คํธ๋ฆผ ์ข
๋จ ์ฐ์ฐ
์คํธ๋ฆผ ํ์ดํ๋ผ์ธ์์ ๋ณ๋ ฌํ์ ํจ๊ณผ๋ ์ข ๋จ ์ฐ์ฐ์ ๋ฐ๋ผ ๋ฌ๋ผ์ง๋ค.
๋ชจ๋ ์์๋ฅผ ํ๋๋ก ํฉ์น๋(
count
,max
,min
,sum
) ์ถ์(reduction) ์ฐ์ฐ์ ๋ณ๋ ฌํ์ ํจ๊ณผ๊ฐ ๊ฐ์ฅ ์ข๋ค.anyMatch
,allMatch
,noneMatch
๊ฐ์ ์กฐ๊ฑด์ ๋ง์ผ๋ฉด ๋ฐ๋ก ๋ฐํ๋๋ ์ฐ์ฐ๋ ํจ๊ณผ์ ์ด๋ค.ํ์ง๋ง ๊ฐ๋ณ ์ถ์(mutable reduction)๋ฅผ ์ํํ๋
collect
๊ฐ์ ๋ฉ์๋๋ ๋ณ๋ ฌํ์ ์ ํฉํ์ง ์๋ค.
Spliterator
๋ณ๋ ฌํ๋ฅผ ๋๋๋ ์์
์ Spliterator
๊ฐ ์ํํ๋ฉฐ, Stream์ด๋ Iterable์ spliterator()
๋ฉ์๋๋ฅผ ํธ์ถํ๋ฉด ์ป์ ์ ์๋ค.
์ด spliterator()
๋ฉ์๋๋ฅผ ์ฌ๋ฐ๋ฅด๊ฒ ์ฌ์ ์ํ๋ฉด ๋์ ์ฑ๋ฅ์ ๋ผ ์ ์์ง๋ง, ๋์ด๋ ์๋ ์์
์ด๊ธฐ ๋๋ฌธ์ ์ฑ
์์๋ ๋ค๋ฃจ์ง ์์๋ค.
์คํธ๋ฆผ ๋ณ๋ ฌํ์ ํจ์จ์ฑ
์คํธ๋ฆผ์ ์๋ชป ๋ณ๋ ฌํํ๋ฉด ์ฑ๋ฅ์ด ๋๋น ์ง๊ฑฐ๋ ์ฒซ ์์ ์ฝ๋์ฒ๋ผ ์์ ๋์ํ์ง ์์ ์ ์๋ค. ๊ฒ๋ค๊ฐ ์ ์ ์์ ๋ฐ์ดํฐ๋ ์คํ๋ ค ๋ณ๋ ฌํ์ ๋๋ ์ถ๊ฐ ๋น์ฉ ๋๋ฌธ์ ์ฑ๋ฅ ํฅ์์ ๋ฏธ๋ฏธํ๊ฑฐ๋ ์คํ๋ ค ๋๋ ค์ง ์ ์๋ค.(์ฑ ์ ์ํ๋ฉด ์์ ์ * ์ํ ์ฝ๋ ์ > ์์ญ๋ง ์ ๋ ๋์ด์ผ ๋ณ๋ ฌํ์ ํจ๊ณผ๊ฐ ๋ํ๋๋ค๊ณ ํ๋ค.) ๋๋ฌธ์ ๋ณ๋ ฌํ๋ฅผ ๊ณ ๋ คํ ๋๋ ์ฑ๋ฅ ํ ์คํธ๋ฅผ ํตํด ์ค์ ๋ก ํจ๊ณผ๊ฐ ์๋์ง ํ์ธํด์ผ ํ๋ค. ์ค์ ๋ก ์คํธ๋ฆผ ํ์ดํ๋ผ์ธ ๋ณ๋ ฌํ๋ ์ฌ์ฉํ ์ผ์ด ๋ง์ง ์์ง๋ง, ์๋์ ๊ฐ์ด ํจ๊ณผ์ ์ผ๋ก ์ฌ์ฉํ ์ ์๋ ๊ฒฝ์ฐ๊ฐ ์๋ค.(์ฝ 5๋ฐฐ ์ฑ๋ฅ ํฅ์, M2 Pro 10์ฝ์ด CPU ๊ธฐ์ค)
Last updated
Was this helpful?