Page History
성능업(ScaleUP) VS 확장(ScaleOUT)
ScaleUP
...
노드1의 장비 성능을 높이기위해 사용되는 여러가지 행위임
...
개선및 도입에 따른 측정도 중요한 사안입니다.
ScaleOut
...
측정된 노드1의 성능을 베이스로, 대용량처리를 위해 노드를 수평적으로 확장해 나갈수 있는 행위이며
...
병렬적으로 늘린 장비에 대한 장애대비,관리,확장대비 성능측정도 중요한 사안입니다.
동시성(Concurrency) VS 병렬처리(Parallelism)
동시성과 병렬성은 관련 개념이지만 약간의 차이점이 있습니다.
...
반면에 병렬 처리는 실행이 진정으로 동시에 일어날 수있을 때 발생합니다.
concurrency
...
동시성의 경우, 본질적으로 작업이 ,동일시간에 한꺼번에 실행되지는 않습니다.
...
Code Block | ||||||||
---|---|---|---|---|---|---|---|---|
| ||||||||
using System; using System.Threading; using System.Threading.Tasks; class CustomData { public long CreationTime; public int Name; public int ThreadNum; } public class Example { public static void Main() { // Create the task object by using an Action(Of Object) to pass in custom data // to the Task constructor. This is useful when you need to capture outer variables // from within a loop. Task[] taskArray = new Task[10]; for (int i = 0; i < taskArray.Length; i++) { taskArray[i] = Task.Factory.StartNew( (Object obj ) => { CustomData data = obj as CustomData; if (data == null) return; data.ThreadNum = Thread.CurrentThread.ManagedThreadId; Console.WriteLine("Task #{0} created at {1} on thread #{2}.", data.Name, data.CreationTime, data.ThreadNum); }, new CustomData() {Name = i, CreationTime = DateTime.Now.Ticks} ); } Task.WaitAll(taskArray); } } // The example displays output like the following: // Task #0 created at 635116412924597583 on thread #3. // Task #1 created at 635116412924607584 on thread #4. // Task #3 created at 635116412924607584 on thread #4. // Task #4 created at 635116412924607584 on thread #4. // Task #2 created at 635116412924607584 on thread #3. // Task #6 created at 635116412924607584 on thread #3. // Task #5 created at 635116412924607584 on thread #4. // Task #8 created at 635116412924607584 on thread #4. // Task #7 created at 635116412924607584 on thread #3. // Task #9 created at 635116412924607584 on thread #4. |
Parallelism
...
병렬처리의 경우 작업을 명시적으로 여러개의 물리(코어)적 연산 장치에 각각 Join시켜 한꺼번에 처리하는 경우를 진정한 의미에서 병렬처리라 할수 있습니다.
...
Code Block | ||||||
---|---|---|---|---|---|---|
| ||||||
//병렬처리를 위한 멀티 코어 프로그래밍 예 Thread[] threads = new Thread[NumOfThread]; Process currentProcess = Process.GetCurrentProcess(); foreach (ProcessThread processThread in currentProcess.Threads) { processThread.ProcessorAffinity = currentProcess.ProcessorAffinity; } //물리적단위인 Core(process) 에 Task를 명시적으로 걸고 동시에 시작해버립니다. for (int i = 0; i < NumOfThread; i++) { threads[i].Join(); } } |
Anchor | ||||
---|---|---|---|---|
|
Synchronous(동기)
...
메서드 호출후 값이 반환되거나, 예외가 throw될때까지 호출자가 진행할수 없는 경우
Asynchronous(비동기)
...
메서드 호출후 호출자는 몇가지 메카니즘(완료및 진행 등록된 콜백)을 통해 알수있으며
...
일반적으로 비동기 API로 설계하는것은 시스템이 진보할수 있음을 보장함으로 선호됩니다.
액터는 본질적으로 비동기입니다.
Non-blocking vs. Blocking
...
한 스레드의 지연이 다른 스레드를 무기한 지연 시킬수 있을때 블록킹되었다라고 표현함
...
블록킹 작업포함시 전반적인 작업진행이 쉽게 보장이 되지 않기때문에, 논블록킹 작업방식으로의 설계가 추천됩니다.
Deadlock vs. Starvation vs. Live-lock
...
DeadLock
DeadLock(교착상태)는 여러 Task가 어떠한 특정 상태를 기다린후 진행할수 있는 구조에서
어떠한 Task가 특정상태에 도달하지 못할때 하위의 모든 시스템이 멈추는 경우입니다.
Starvation
Starvation(빈곤)은 계속 진행이되며 , 우선순위가 높은 Task가 어렵게 진행이되지만
항상 높은 우선순위의 Task를 선택하는 순진한 스케쥴링 알고리즘때문에 낮은 순위의 Task가
끝나지 않거나 진입을 못하는 경우입니다.
LiveLock
LiveLock은 Task중 누구도 진행되지 않는 경우이며, 교착상태와 유사합니다. 서로 진행되기를
...
양보하는 경우가 발생하여 누구도 실행되지 않는 케이스입니다.
Race Condition
...
우리가 정한 이벤트 세트의 순서에대한 가정이 , 외부의 결정적이지 않은 효과임에도 불구하고
...
Info |
---|
이러한 문제는 여러가지 액터가 메시지를 동시에 보내고 어떠한 한가지 액터가 그 메시지를 받아서 처리할때 메시지 순서에대한 보증을 어떠한 근거로 할것인가? 의 고민에 빠지게됩니다. 메시지 전달 보증(Message Delivery Reliability)에 추가적으로 언급하겠습니다. |
Anchor | ||||
---|---|---|---|---|
|
...
이전 섹션에서 설명된것처럼 블로킹은 여러가지 이유로 바람직하지 않습니다.
...
다음은 다양한 강도(차단이 강하거나 제한) 를 지닌 차단 특성에대해 논의를 합니다.
Wait-freedom -기다림이 없으나 호출수 한정
...
모든 호출이 한정된 수의 단계로 끝나도록 보장되는 경우 메소드는 대기하지 않아도됩니다.
...
참여자는 제한된 수의 호출후에 진행할수 있으므로 궁핍(기아)현상이 발생하지 않습니다.
Lock-freedom -Lock이 없음
...
Lock이 없기때문에 교착상태가 발생하지 않지만
호출이 결국 완료되는것을 보장하지 않기때문에 궁핍(기아)현상을 보장하기에는 충분하지 않습니다.
Obstruction-freedom -기다림/Lock등 방해요소가없음
...
메소드가 격리되어 작동하다가, 특정 시점을 (Write중)
...
아무런 조취를 하지 않기때문에 진행작업이 중단될수가 있습니다. ( access violation at address )
낙관성 동시성 제어(OCC-Optimistic concurrency control)는
발생가능성이 거의 없을것으로 예상하고(충돌로 인해 문제 발생시,스케쥴을 조정해버려서 해결)
...