1. 직렬 / 병렬
직렬 처리로 속도를 올리는 데에 한계가 있습니다.
병렬화를 통해 속도는 빨라지지 않지만, 단위 시간당 처리량을 늘릴 수 있습니다.
· 병렬 처리에는 합류점, 직렬화 구간, 분기점이 병목 지점이 되기 쉽습니다.
· 병렬화할 때는 일을 분담해서 처리를 한 후 다시 집약할 때 오버헤드가 걸립니다. 그러므로 이 오버헤드를 감안하더라도 효과가 있을 경우에 병렬화를 해야 합니다.
|
장점
|
단점
|
직렬
|
- 구조가 간단하여 설계나 구현 난이도가 낮습니다.
|
- 복수의 리소스를 유용하게 이용할 수 없습니다.
|
병렬
|
- 복수의 리소스를 유용하게 이용할 수 있습니다.
- 동일 시간당 처리할 수 있는 양이 증가합니다. - 일부가 고장나도 처리를 계속할 수 있습니다. |
- 처리분기나 합류를 위한 오버헤드가 발생합니다.
- 베타 제어 등을 고려해야 하고 구조가 복잡해서 설계나 구현 난이도가 높습니다. |
※ 병렬 vs 병행
병렬 : 동시에 복수의 처리를 실행합니다.
병행 : 복수의 처리가 실행 상태에 있는 것을 병행이라 하며, 병렬을 내포하고 있는 개념입니다.
2. 동기 / 비동기
최근 '클라우드' 기술이 증가하고, 대량의 데이터를 처리하는 대규모 웹 서비스가 늘어나게 되면서, 장비 발열 및 소비 전력 문제가 발생되고 있습니다. 해당 문제로 멀티 코어화가 진행되고 있는 흐름에서 '비동기 병렬 처리' 경우가 더 늘어날 것으로 예상되고 있습니다.
동기의 특징
다른 사람에게 일을 부탁한 후 끝날 때까지 아무것도 하지 않고 기다리기 때문에 그 사이에 다른 것을 할 수 없습니다. 하지만 의뢰한 것이 끝났는지 여부를 확실하게 확인할 수 있습니다.
비동기의 특징
끝날 때까지 기다리지 않기 때문에 병렬로 다른 일을 할 수 있습니다. 하지만 의뢰한 일이 끝났는지 여부를 확인하고 싶으면 별도의 방법을 이용해야 합니다.
|
장점
|
단점
|
동기
|
- 의뢰한 처리가 끝났는지 쉽게 확인할 수 있습니다.
- 때문에 구조가 간단하고 구현 난이도가 낮습니다. |
- 의뢰한 처리가 끝나기까지 기다려야 하기 때문에 대기 시간을 활용할 수 없다.
|
비동기
|
- 의뢰한 처리가 진행되고 있는 동안 시간을 효율적으로 사용해서 병렬 처리를 할 수 있다.
|
- 의뢰한 처리가 끝났는지 확인하지 않으면 알 수 없습니다.
- 불필요한 확인 처리가 늘어나고 구조가 복잡해서 구현 난이도가 높습니다. |
간단하게 정리하자면 줄을 설 때는 가장 마지막에 서고, 처리는 선두부터 순서대로 됩니다.
먼저 들어온 데이터가 먼저 나가는 큐 동작을 FIFO(First In First Out) 방식이라고 합니다.
그럼 큐는 어디에 사용될까?
① CPU 처리를 기다리고 있는 프로세스나 스레드 행렬(런큐, run-queue)
② 하드 디스크 등의 저장소 읽기 처리를 기다리고 있는 I/O 요구 행렬
③ 네트워크 접속 성립을 기다리고 있는 접속 요구 행렬
4. 배타적 제어
복수의 처리가 공유 자원에 동시에 액세스하면 불일치가 발생할 수 있기 때문에 배타적 제어로 보호해 주어야 합니다.
배타적 제어에서는 특정 처리가 공유 자원을 이용하고 있는 동안 다른 처리가 이용할 수 없계 해서 불일치가 발생하지 않도록 합니다.
|
장점
|
단점
|
베타적 제어 O
|
- 공유 데이터의 일관성을 유지할 수 있습니다.
|
- 병렬 처리가 안됩니다.
|
베타적 제어 X
|
- 병렬을 빠르게 처리할 수 있습니다.
|
- 데이터 불일치가 발생할 가능성이 있습니다.
|
5. 상태 저장 / 상태 비저장
상태를 고려하는 것을 상태 저장, 고려하지 않는 것을 상태 비저장이라 합니다.
상태 저장은 고려하기 때문에 복잡한 처리가 가능하지만, 시스템 복잡성이 커집니다.
자신의 상태를 이해하기 때문에 요청 내용을 최소화할 수 있습니다.
상태 비저장은 고려하지 않기 때문에 간단하며, 성능이나 안전성 측면에서 우수합니다.
간단하다는 것은 요청과 그에 대한 응답 구조가 간단한 것입니다.
6. 가변 길이 / 고정 길이
가변 길이
|
공간을 유용하게 활용할 수 있지만 성능 면에서 불안정합니다.
|
고정 길이
|
쓸데없는 공간이 생기지만 성능 면에서는 안정적입니다.
|
7. 데이터 구조
자주 사용되는 데이터 구조 중 배열과 연결 리스트가 있습니다. 둘 모두 순차적으로 데이터를 처리하는 구조이지만, 성능 측면 특징이 다릅니다.
배열
데이터를 빈틈없이 순서대로 나열한 구조입니다.
배열은 N번째 탐색이 빠르지만, 데이터 추가나 삭제가 느립니다.
연결 리스트
데이터를 선으로 연결한 구조입니다,
배열과 반대로 데이터 추가나 삭제는 빠르지만, N번째 탐색이 느립니다.
※ 해시 테이블
배열과 연결 리스트의 상호 장점만 조합해서 약점을 보완한 데이터 구조입니다.
큐나 스택 등의 데이터 구조도 배열이나 연결 리스트로 구현되어 있습니다.
8. 탐색 알고리즘
필요한 때에 필요한 데이터를 빠르게 찾기 위해서 데이터를 정리해 둘 필요가 있습니다.
데이터를 찾을 때의 데이터 구조와 데이터 저장 방식(메모리, HDD, SSD 등) 특성에 따라 적합한 데이터 정리 방법이 달라집니다.
데이터 정리 방법을 ‘데이터 구조’, 처리 순서를 ‘알고리즘’ 이라고 합니다.
처리 상대에 맞추어 데이터 구조를 정리할 필요가 있기 때문에 ‘알고리즘과 데이터 구조’는 자주 함께 다루어집니다.
'Develop > Infra' 카테고리의 다른 글
무정지를 위한 인프라 구조 (0) | 2022.05.08 |
---|---|
인프라 네트워크 구조 (0) | 2022.05.08 |
인프라 응용 이론 (0) | 2022.05.08 |
3계층형 시스템 (0) | 2022.05.08 |
인프라 아키텍처 (0) | 2022.05.08 |