중력이 작용하는 지구에서 물은 위에서 아래로 흐릅니다. 정보를 공유하는 인터넷 세상은 인간의 욕구에 의해 만들어진 세상이지만 그 속에서 수많은 데이터가 흐르고 있습니다. 물의 순환은 수증기가 되어 하늘로 올라갔다가 다시 땅 위에 떨어지는 현상의 반복으로 처음과 끝이 없는 순환이고 지구 위 물의 총량은 같지만, 인터넷 세상에서 데이터의 교류는 '나'에서 '너'에게로, '너'에서 '나'에게로 흐르는, 처음과 끝이 있는 교류이며 수도 없이 만들어집니다. 지구에서 인간이 태어나는 것보다 인터넷 세상에서 데이터가 쌓이는 것이 훨씬 빠르고 많습니다. 그래서 요즘 '빅데이터'라는 말을 심심치않게 들을 수 있습니다.

지금 우리는 서로에게 데이터가 흘러가는 과정들을 살펴보고 있습니다. 앞서 살펴볼 직렬과 병렬처리는 CPU라는 미시적인 관점에서 시스템 전체의 거시적인 관점(여러 명의 사용자 요청을 처리하는 다수의 서버를 이용하는 대규모 웹 서비스)까지 적용되는 개념입니다.

1. 직렬과 병렬의 개념

물이 흐르는 수로가 하나라면 직렬이고, 여러 개이면 병렬입니다. 한번에 많은 양의 물이 흐를 수 있는 수로는 한번에 많은 양의 데이터를 흐르게하는 고성능 CPU에 비유할 수 있습니다. CPU 제조사가 클럭속도를 올리면 되는데 한계점이 존재합니다. 반면에, CPU 코어를 여러개로 나누어서 데이터 처리를 분담하면 처리시간을 그만큼 아낄 수 있습니다. 대신 처리한 데이터를 합치는 합류점, 다시 통로가 하나가 되는 직렬화 구간, 분기점이 병목 지점이 되기 쉽습니다. 데이터를 집약할 때 오버헤드가 걸린다고 하는데 오버헤드를 감안하더라도 효과가 있을 경우에 병렬화를 적용합니다.

2. 병렬화의 적용 (웹 서버, AP 서버, DB 서버)

2-1. 웹 서버
웹 서버에는 다수의 이용자가 접속하기 때문에 복수의 프로세스가 분담해서 병렬 처리를 한다.
2-2. AP 서버
기본적으로 JVM은 하나의 프로세스에 4개의 스레드를 병렬화하는 멀티스레드 기법이다. 운영체제에서 작업 단위는 프로세스이지만, CPU가 처리하는 작업 단위는 프로세스로부터 전달받은 하나의 스레드이다. 아무리 프로세스를 늘려도 CPU 코어가 한개밖에 없다면 동시에 실행할수 있는 것은 1프로세스뿐이다. 따라서 프로세스나 스레드 수를 조정할 때는 CPU 코어 수도 함께 고려해야한다.
2-3. DB 서버
DB 서버에서도 프로세스를 늘려서 병렬 처리를 할 수 있다. 대표적으로 오라클 DB에서는 클라이언트 요청을 접수하는 서버 프로세스가 클라이언트 접속 수만큼 생성되는 멀티 프로세스 모델을 적용한다. 이외에도 공유 서버형이라 불리는 하이브리드형은 멀티 프로세스와 멀티 스레드를 모두 사용할 수 있다.

3. 프로세스와 스레드 개념을 한 번 더! 짚고가자.

3-1. 프로그램과 프로세스
프로그램: 저장장치에 저장되어 있는 정적인 상태의 데이터.
프로세스: 실행을 위해 메모리에 있는 동적인 상태의 데이터.
프로세스의 일처리방식, 상태, 제어블록, 구조 등 깊은 내용은 다음에 더 알아보기로 한다.
3-2. 프로세스와 스레드
프로세스는 운영체제 입장에서의 작업 단위이고 스레드는 CPU입장에서의 작업 단위이다.
멀티 태스크는 여러개의 프로세스로 구성된 것이고 멀티 스레드는 하나의 프로세스에 여러개의 스레드로 구성된 것이다.
CPU 멀티 스레드?? 는 한번에 하나씩 처리하는 스레드를 파이프라인 기법을 이용해서 동시에 여러 스레드를 처리하도록 만든 병렬처리 기법을 말한다.

4. 병렬화의 장단점 정리

병렬화 장점:
복수의 리소스(여러 컴퓨터나 프로세서 등)를 유용하게 이용할 수 있고 직렬에 비해 동일 시간당 처리량이 증가한다. 또한, 일부가 고장나도 계속 일을 처리할 수 있는 이중화라는 장점도 있다.
병렬화 단점:
처리 분기나 합류를 위한 오버헤드가 발생하므로 배타적 제어 등을 고려해야하고 구조가 복잡해서 설계나 구현 난이도가 높다.

5. 결론

병렬화를 잘 알고 사용해야한다. 특히, 병목 지점이 되는 오버헤드를 고려해서 병렬화 해야겠다.

profile
바로 하자, Right Now!

0개의 댓글