Page History
...
동시성의 경우, 본질적으로 작업이 ,동일시간(나노세컨)에 동시에 한꺼번에 실행되지는 않습니다. 작업이 작은 단위로 조각이 난상태로
task 스위칭이 일어나면서 일시정지, 실행을 반복하게 됩니다.
일반적으로 Task관리자에의해 상태를 복구를 반복 하면서 동시에 처리되는것처럼 보일려고 합니다.
하나의 Task에대한 성능을 높이기보다, 제한적인 스레드로 전체적인 총량에 대한 처리의 효율을 높이는데 의미가 있습니다.
Thread에 비해 Task는 충분히 많이 만들수 있으며 멀티 스레드에서 OS의 Thread Context 스위칭보다 일반적으로 효율적이다라고 하고있습니다.
...
language | c# |
---|---|
theme | Emacs |
linenumbers | true |
...
작업전환이 이루어지면서 마치 같이 진행되는것처럼 보입니다.
Info |
---|
물론 이 코드는, 옵션이나 실행 최적화에의해 다중스레드 병렬처리가 될수도 있습니다. 하지만 TASK개수만큼 OS의 자원인 스레드를 소비하지 않습니다. Task VS Thread : Task는 Thread를 효율적으로 사용하는 추상적 개체로 OS에따라 스케쥴 방식이 틀리고 또한 프레임워크따라 비동기처리를 위한 스레드 관리방식이 틀리기때문에 이 부분은 깊게 들어가지 않고, Actor가 어떻게 스레드수를 고려하여 튜닝가능한지? actor-dispatcher 편에서 에서 더 자세하게 설명예정입니다. 설명 하겠습니다.
웹서버에있어서,1개의 스레드로 어떻게 다중처리에 대해 응답이좋은 웹서버를 설계를 하나? node.js 예에서 이 케이스는 설명이될듯합니다. 논란이 많았지만 현재는 이방식에대한 효율이 인정이되고 비동기 프로그래밍이 확산이되고 그것과 연관이 있습니다. |
Anchor | ||||
---|---|---|---|---|
|
...
각 Task를 하나씩 작동시키는 방법도 의미적으로 병렬처리라고 할수있습니다. 하지만 1Core입장에서는 한번에 하나의일을
못하기때문에 1Core입장에서는 병렬처리가 아닌 컨텍스트 스위칭발생에 의한 동시처리라고 정의내릴수도 있습니다.
자원적으로 생성할수 있는 스레드수는 제한적이며, CPU의 성능 향샹에 따라 성능적으로 효율적인 개발방법이였으나
스레드를 직접 생성하여 복잡한 스레드모델을 적용하는 개발은 단점도 제기되고 CPU가 더이상 비약적인 발전이 멈추어
스케일업에 한계에 이러렀습니다. 최근에는 성능이 아주좋은 서버가아닌 성능이 나쁘지않는 서버를 여러대 분산하여 처리하는 개발모델로
전통적으로 node.js이전, 비동기프로그래밍 지원이안되던 웹서버에서 스레드개수를 통해 동시요청을 처리하려고 했으며
이경우 서버입장에서 병렬 처리라고 볼수 있습니다. 현재는 대부분 두가지 방식을 적절하게 사용합니다가는 추세입니다.
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(); } } |
...