21
Message cessing.

CiklumCPPSat24032012:GennadiyMaryanichenko-ScalableMessageProcessing

  • Upload
    ciklum

  • View
    224

  • Download
    1

Embed Size (px)

DESCRIPTION

 

Citation preview

Page 1: CiklumCPPSat24032012:GennadiyMaryanichenko-ScalableMessageProcessing

Message processing.

Page 2: CiklumCPPSat24032012:GennadiyMaryanichenko-ScalableMessageProcessing

Цель.

Сравнить реализации.

Page 3: CiklumCPPSat24032012:GennadiyMaryanichenko-ScalableMessageProcessing

Измерения.

T/(iterCount х producersCount)ProcessingTime.

Page 4: CiklumCPPSat24032012:GennadiyMaryanichenko-ScalableMessageProcessing

Измерения.

1. Start producers thread.2. Save start time.3. Signal producers.4. Wait for completing.5. Save finish time.

Page 5: CiklumCPPSat24032012:GennadiyMaryanichenko-ScalableMessageProcessing

Измерения.

Producer.

while (!start) SwitchToThread();for(i = 0;i < iterCount;++i) if(processor.Queue(msg));

Page 6: CiklumCPPSat24032012:GennadiyMaryanichenko-ScalableMessageProcessing

Измерения.

ProcessMessage.

cnt=Increment(&processedCnt);if(cnt == iterCnt*producersCnt) SetEvent(completeEvent);

Page 7: CiklumCPPSat24032012:GennadiyMaryanichenko-ScalableMessageProcessing

Измерения.

ProcessTest.

startTime = rdtsc();start = true;WaitFor(completeEvent);finishTime = rdtsc();

Page 8: CiklumCPPSat24032012:GennadiyMaryanichenko-ScalableMessageProcessing

Код.

MessageProcessor.(MessageQueue + ThreadPool).

Page 9: CiklumCPPSat24032012:GennadiyMaryanichenko-ScalableMessageProcessing

Код.

FakeProcessor.

void Queue(Task*msg){ msg->Process();}

Page 10: CiklumCPPSat24032012:GennadiyMaryanichenko-ScalableMessageProcessing

Код.

TrivialProcessor.

CircularBuffer+

Mutex+

ThreadPool

Page 11: CiklumCPPSat24032012:GennadiyMaryanichenko-ScalableMessageProcessing

0

buffer

1

2 - used

3 - used

4 - used

5

...

2^n

inserter

deleter

Код.

TrivialProcessor.

CircularBuffer+

Mutex+

ThreadPool

Page 12: CiklumCPPSat24032012:GennadiyMaryanichenko-ScalableMessageProcessing

Код.

CircularBuffer+

Magic+

ThreadPool

LockFreeProcessor.

Page 13: CiklumCPPSat24032012:GennadiyMaryanichenko-ScalableMessageProcessing

Код.

LockFreeProcessor.old = Increment(&inserter) - 1;old &= mask;if(0 != CompareExchange( &_array[old], newVal, 0)){ /* !!! */}

Page 14: CiklumCPPSat24032012:GennadiyMaryanichenko-ScalableMessageProcessing

Код.

MpscProcessor.

n x MpscQueue+

ThreadPool+

rand() % n

Page 15: CiklumCPPSat24032012:GennadiyMaryanichenko-ScalableMessageProcessing

Код.

MpscProcessor.

i = rand() % n;queues[i].Push(msg);

Page 16: CiklumCPPSat24032012:GennadiyMaryanichenko-ScalableMessageProcessing

Результат.

?

Page 17: CiklumCPPSat24032012:GennadiyMaryanichenko-ScalableMessageProcessing

Результат.

Page 18: CiklumCPPSat24032012:GennadiyMaryanichenko-ScalableMessageProcessing

Результат.

Page 19: CiklumCPPSat24032012:GennadiyMaryanichenko-ScalableMessageProcessing

Результат.

Page 20: CiklumCPPSat24032012:GennadiyMaryanichenko-ScalableMessageProcessing

За децентрализацию!!!

Page 21: CiklumCPPSat24032012:GennadiyMaryanichenko-ScalableMessageProcessing

Всем спасибо!!!