31
Оо лотек TPL Dataflow

½ (, # (/ ! TPL Dataflowit-perspektiva.altexsoft.com/past-years/documents... · ¯ * -= 8/ & -((: & #(! (o}Á ¥#(! *, (-/ #A@/, # 8&< -*(-(< * - 8/ & A-((: & ª %&-/, 6 A

  • Upload
    others

  • View
    6

  • Download
    0

Embed Size (px)

Citation preview

Page 1: ½ (, # (/ ! TPL Dataflowit-perspektiva.altexsoft.com/past-years/documents... · ¯ * -= 8/ & -((: & #(! (o}Á ¥#(! *, (-/ #A@/, # 8&< -*(-(< * - 8/ & A-((: & ª %&-/, 6 A

О о л отек TPL Dataflow

Page 2: ½ (, # (/ ! TPL Dataflowit-perspektiva.altexsoft.com/past-years/documents... · ¯ * -= 8/ & -((: & #(! (o}Á ¥#(! *, (-/ #A@/, # 8&< -*(-(< * - 8/ & A-((: & ª %&-/, 6 A

TPL Dataflow – то то дл е о?

• Это л отек , т е Microsoft, п о т е е е NuGet

• TPL Dataflow по о ет по т п о од тел о т у то о т у е п ллел п ло е

• TPL Dataflow л ет е л е одел кто о

• под од, о о по т ое л тел о о ко е е , о то е о л тел локо , от п ллел о е о д у от д у

• оде т е п о од т путё пе ед о оо е е ду лок

Page 3: ½ (, # (/ ! TPL Dataflowit-perspektiva.altexsoft.com/past-years/documents... · ¯ * -= 8/ & -((: & #(! (o}Á ¥#(! *, (-/ #A@/, # 8&< -*(-(< * - 8/ & A-((: & ª %&-/, 6 A

Модел кто о Это те т е к одел п ллел ле кото о

кто л ет л тел о у о т . кто о ет: • п т оо е от д у кто о

• отп т оо е д у кто

• о д т о е кто

• пол т к ку -л о п у у кто у оту

• ет о то е

кто п у ут е п ллел

кто ол о д у от д у

кто оде т у т д у д у о путё о е а и х о ы и оо е

Page 4: ½ (, # (/ ! TPL Dataflowit-perspektiva.altexsoft.com/past-years/documents... · ¯ * -= 8/ & -((: & #(! (o}Á ¥#(! *, (-/ #A@/, # 8&< -*(-(< * - 8/ & A-((: & ª %&-/, 6 A

К т к те ет

Page 5: ½ (, # (/ ! TPL Dataflowit-perspektiva.altexsoft.com/past-years/documents... · ¯ * -= 8/ & -((: & #(! (o}Á ¥#(! *, (-/ #A@/, # 8&< -*(-(< * - 8/ & A-((: & ª %&-/, 6 A

о одел

о у о т – лок dataflow (dataflow block)

т т д локо : • лок то к source blocks) – де т у т к к то к

д – о о т т

• лок п ё к target blocks) – де т у т к к п ё к д – о о п т

• лок п о т тел propagator blocks) – де т у т к к од о е е о то к п ё к д – / о о

т т , п т

Page 6: ½ (, # (/ ! TPL Dataflowit-perspektiva.altexsoft.com/past-years/documents... · ¯ * -= 8/ & -((: & #(! (o}Á ¥#(! *, (-/ #A@/, # 8&< -*(-(< * - 8/ & A-((: & ª %&-/, 6 A

Д те е о

Page 7: ½ (, # (/ ! TPL Dataflowit-perspektiva.altexsoft.com/past-years/documents... · ¯ * -= 8/ & -((: & #(! (o}Á ¥#(! *, (-/ #A@/, # 8&< -*(-(< * - 8/ & A-((: & ª %&-/, 6 A

п те е оо е лок Dataflow

лок п едо т л т л е по о п те оо е

е т о о п / те :

var bufferBlock = new BufferBlock<int>();

// Send messages to the block asynchronously.

for (var i = 0; i < 3; ++i)

{

await bufferBlock.SendAsync(i);

}

// Asynchronously receive the messages back from the block.

for (var i = 0; i < 3; ++i)

{

Console.WriteLine(await bufferBlock.ReceiveAsync());

}

/* Output:

0

1 2 */

Page 8: ½ (, # (/ ! TPL Dataflowit-perspektiva.altexsoft.com/past-years/documents... · ¯ * -= 8/ & -((: & #(! (o}Á ¥#(! *, (-/ #A@/, # 8&< -*(-(< * - 8/ & A-((: & ª %&-/, 6 A

е локо

• лок о о т , о у ко е е л

• Од лок то к о о т о е т о локо п ё ко • Од лок п ё к о о т о е т о локо

то ко

• И пол ует етод ISourceBlock<TOutput>.LinkTo

• Метод LinkTo допол тел о о ет п т п ед к т, по ол л т о т оо е

Page 9: ½ (, # (/ ! TPL Dataflowit-perspektiva.altexsoft.com/past-years/documents... · ¯ * -= 8/ & -((: & #(! (o}Á ¥#(! *, (-/ #A@/, # 8&< -*(-(< * - 8/ & A-((: & ª %&-/, 6 A

е локо - де о т var bufferBlock = new BufferBlock<int>();

var batchBlock = new BatchBlock<int>(4);

var actionBlock = new ActionBlock<int[]>(values => Console.WriteLine(String.Join(" ", values)));

// Link bufferBlock output to batchBlock input

bufferBlock.LinkTo(batchBlock, new DataflowLinkOptions { PropagateCompletion = true });

// Link batchBlock output to actionBlock input

batchBlock.LinkTo(actionBlock, new DataflowLinkOptions { PropagateCompletion = true });

for (var i = 0; i < 16; ++i)

{

await bufferBlock.SendAsync(i);

}

// Complete blocks and wait for completion to avoid them to be early collected by GC

bufferBlock.Complete(); await actionBlock.Completion;

/* Output:

0 1 2 3

4 5 6 7

8 9 10 11

12 13 14 15 */

Page 10: ½ (, # (/ ! TPL Dataflowit-perspektiva.altexsoft.com/past-years/documents... · ¯ * -= 8/ & -((: & #(! (o}Á ¥#(! *, (-/ #A@/, # 8&< -*(-(< * - 8/ & A-((: & ª %&-/, 6 A

едоп еделё е лок

О дел т 3 к те о : • у е е лок uffering lo ks

• И пол тел е лок exe ution lo ks

• упп у е лок grouping lo ks

Page 11: ½ (, # (/ ! TPL Dataflowit-perspektiva.altexsoft.com/past-years/documents... · ¯ * -= 8/ & -((: & #(! (o}Á ¥#(! *, (-/ #A@/, # 8&< -*(-(< * - 8/ & A-((: & ª %&-/, 6 A

Бу е е лок (buffering blocks)

Page 12: ½ (, # (/ ! TPL Dataflowit-perspektiva.altexsoft.com/past-years/documents... · ¯ * -= 8/ & -((: & #(! (o}Á ¥#(! *, (-/ #A@/, # 8&< -*(-(< * - 8/ & A-((: & ª %&-/, 6 A

BufferBlock<T>

• е л ует о е ед FIFO о е о е

• оо е о ут п од т о е т то ко у у од т о о е т о п ё ко п то к дое оо е е поп д ет

тол ко од п ё к

• оле е е л т е ует т о до т к е оо е оп еделё п ё к

Page 13: ½ (, # (/ ! TPL Dataflowit-perspektiva.altexsoft.com/past-years/documents... · ¯ * -= 8/ & -((: & #(! (o}Á ¥#(! *, (-/ #A@/, # 8&< -*(-(< * - 8/ & A-((: & ª %&-/, 6 A

BroadcastBlock<T> • оле е , ко д у о пе ед т к дое оо е е е п ё к

• Т к е поле е , ко д т е ует пе ед т о е т о оо е оп еделё о у п ё ку п то п ё ку е д т е ует тол ко ое по лед ее оо е е т. е. е ол ует поте оо е

Page 14: ½ (, # (/ ! TPL Dataflowit-perspektiva.altexsoft.com/past-years/documents... · ¯ * -= 8/ & -((: & #(! (o}Á ¥#(! *, (-/ #A@/, # 8&< -*(-(< * - 8/ & A-((: & ª %&-/, 6 A

WriteOnceBlock<T>

• Я л ет т лу е Broad astBlo k<T>

• Отл е о то т то то е о о о п т е о од о оо е е

Page 15: ½ (, # (/ ! TPL Dataflowit-perspektiva.altexsoft.com/past-years/documents... · ¯ * -= 8/ & -((: & #(! (o}Á ¥#(! *, (-/ #A@/, # 8&< -*(-(< * - 8/ & A-((: & ª %&-/, 6 A

пол тел е лок (execution blocks)

Page 16: ½ (, # (/ ! TPL Dataflowit-perspektiva.altexsoft.com/past-years/documents... · ¯ * -= 8/ & -((: & #(! (o}Á ¥#(! *, (-/ #A@/, # 8&< -*(-(< * - 8/ & A-((: & ª %&-/, 6 A

ActionBlock<TInput>

• Это лок-п ё к

• пол ет д ое де т е д к д по туп оо е е

• е т е о ет т : • о ое – д ёт по о Action<TInput>

• о ое – д ёт по о Func<TInput, Task>

Page 17: ½ (, # (/ ! TPL Dataflowit-perspektiva.altexsoft.com/past-years/documents... · ¯ * -= 8/ & -((: & #(! (o}Á ¥#(! *, (-/ #A@/, # 8&< -*(-(< * - 8/ & A-((: & ª %&-/, 6 A

TransformBlock<TInput, TOutput>

• Т о ует к дое од ее оо е е од ее оо е е пол д ое де т е

• е т е о ет т : • о ое – д ёт по о Func<TInput, TOutput>

• о ое – д ёт по о Func<TInput, Task<TOutput>>

Page 18: ½ (, # (/ ! TPL Dataflowit-perspektiva.altexsoft.com/past-years/documents... · ¯ * -= 8/ & -((: & #(! (o}Á ¥#(! *, (-/ #A@/, # 8&< -*(-(< * - 8/ & A-((: & ª %&-/, 6 A

TransformManyBlock<TInput, TOutput>

• о о TransformBlock

• Т о ует к дое од ее оо е е по ледо тел о т од оо е пол д ое де т е

• е т е о ет т : • о ое – д ёт по о Func<TInput, IEnumerable<TOutput>>

• о ое – д ёт по о Func<TInput, Task<IEnumerable<TOutput>>>

Page 19: ½ (, # (/ ! TPL Dataflowit-perspektiva.altexsoft.com/past-years/documents... · ¯ * -= 8/ & -((: & #(! (o}Á ¥#(! *, (-/ #A@/, # 8&< -*(-(< * - 8/ & A-((: & ª %&-/, 6 A

У о е п ллел

о у ол е пол тел е лок о т т тол ко од о оо е е од о е е о

о еде е по-у ол о о е т , д у о е п ллел – то по ол ет о т т од о е е о

о е т о оо е е

Page 20: ½ (, # (/ ! TPL Dataflowit-perspektiva.altexsoft.com/past-years/documents... · ¯ * -= 8/ & -((: & #(! (o}Á ¥#(! *, (-/ #A@/, # 8&< -*(-(< * - 8/ & A-((: & ª %&-/, 6 A

Г упп у е лок (grouping blocks)

Page 21: ½ (, # (/ ! TPL Dataflowit-perspektiva.altexsoft.com/past-years/documents... · ¯ * -= 8/ & -((: & #(! (o}Á ¥#(! *, (-/ #A@/, # 8&< -*(-(< * - 8/ & A-((: & ª %&-/, 6 A

BatchBlock<T>

Ко ует од е оо е п кет д о о е отд ёт к е т е од оо е

Page 22: ½ (, # (/ ! TPL Dataflowit-perspektiva.altexsoft.com/past-years/documents... · ¯ * -= 8/ & -((: & #(! (o}Á ¥#(! *, (-/ #A@/, # 8&< -*(-(< * - 8/ & A-((: & ª %&-/, 6 A

JoinBlock<T1, T2>, JoinBlock<T1, T2, T3>

о ет оо е д у л т ё е то ко п л т о к отд ёт к е т е од оо е

Page 23: ½ (, # (/ ! TPL Dataflowit-perspektiva.altexsoft.com/past-years/documents... · ¯ * -= 8/ & -((: & #(! (o}Á ¥#(! *, (-/ #A@/, # 8&< -*(-(< * - 8/ & A-((: & ª %&-/, 6 A

BatchedJoinBlock<T1, T2>, BatchedJoinBlock<T1, T2, T3>

Я л ет ко е Bat hBlo k JoinBlo k

Page 24: ½ (, # (/ ! TPL Dataflowit-perspektiva.altexsoft.com/past-years/documents... · ¯ * -= 8/ & -((: & #(! (o}Á ¥#(! *, (-/ #A@/, # 8&< -*(-(< * - 8/ & A-((: & ª %&-/, 6 A

е д о т (greedy mode)

упп у е лок о ут от т д о е- д о е

BatchBlock (4)

Page 25: ½ (, # (/ ! TPL Dataflowit-perspektiva.altexsoft.com/past-years/documents... · ¯ * -= 8/ & -((: & #(! (o}Á ¥#(! *, (-/ #A@/, # 8&< -*(-(< * - 8/ & A-((: & ª %&-/, 6 A

е д о т (greedy mode)

• д о е е по-у ол о п т е оо е

• е- д о е е о откл д т оо е -пото пок оде е удет до т то ое кол е т о оо е то

о о т од ое оо е е

• Это д ёт о о о т отд т т оо е д у лок е л т ко е е т )

При еча ие. одо о о по еде т к- е о о до т у т л о т о BoundedCapacity – к л е

од е о у е оо е – о о до туп о дл е локо е тол ко упп у

Page 26: ½ (, # (/ ! TPL Dataflowit-perspektiva.altexsoft.com/past-years/documents... · ¯ * -= 8/ & -((: & #(! (o}Á ¥#(! *, (-/ #A@/, # 8&< -*(-(< * - 8/ & A-((: & ª %&-/, 6 A

о д е о т е локо

• Мо о о у е л о т те е ISourceBlock<TOutput> / л ITargetBlock<TInput>

• Мо о пол о т етод Encapsulate<TInput, TOutput> кото к п ул ует ото ко ее локо о лок

Page 27: ½ (, # (/ ! TPL Dataflowit-perspektiva.altexsoft.com/past-years/documents... · ¯ * -= 8/ & -((: & #(! (o}Á ¥#(! *, (-/ #A@/, # 8&< -*(-(< * - 8/ & A-((: & ª %&-/, 6 A

Де о

Page 28: ½ (, # (/ ! TPL Dataflowit-perspektiva.altexsoft.com/past-years/documents... · ¯ * -= 8/ & -((: & #(! (o}Á ¥#(! *, (-/ #A@/, # 8&< -*(-(< * - 8/ & A-((: & ª %&-/, 6 A

д

• о д о по ко о т оке тек т т о е по о по ко о о е д о де о пол ует Bing • К дое де ое о е е о от т леду

о о : • о URL- д е у о е о о т QR-код

• М т о т о е е, е у ло т QR-код ло от п

• е т п ок е ул т у о е

Page 29: ½ (, # (/ ! TPL Dataflowit-perspektiva.altexsoft.com/past-years/documents... · ¯ * -= 8/ & -((: & #(! (o}Á ¥#(! *, (-/ #A@/, # 8&< -*(-(< * - 8/ & A-((: & ª %&-/, 6 A

о тое по ледо тел ое е е е

var images = await

if (images.Count != 0)

{

foreach (var imageUrl in images) {

var sourceImage = await

if (sourceImage != null) {

var qrImage = await

var resultImage = await

AddImage(resultImage);

}

} }

Page 30: ½ (, # (/ ! TPL Dataflowit-perspektiva.altexsoft.com/past-years/documents... · ¯ * -= 8/ & -((: & #(! (o}Á ¥#(! *, (-/ #A@/, # 8&< -*(-(< * - 8/ & A-((: & ª %&-/, 6 A

Dataflow- е е е

SearchImages

Search Text TransformManyBlock URL URL URL

BroadCastBlock

TransformBlock

DownloadImage

TransformBlock

GenerateQrCode

DisplayImage

JoinBlock

ActionBlock

TransformBlock

ProcessImage

URL URL

QR Image Image

QR Image Image

Result Image

Page 31: ½ (, # (/ ! TPL Dataflowit-perspektiva.altexsoft.com/past-years/documents... · ¯ * -= 8/ & -((: & #(! (o}Á ¥#(! *, (-/ #A@/, # 8&< -*(-(< * - 8/ & A-((: & ª %&-/, 6 A

лк

• Dataflow (Task Parallel Library) on MSDN https://msdn.microsoft.com/en-us/library/hh228603.aspx

• TPL Dataflow Tour on Channel 9 http://channel9.msdn.com/posts/TPL-Dataflow-Tour

• Stephen Toub: Inside TPL Dataflow on Channel 9 http://channel9.msdn.com/Shows/Going+Deep/Stephen-Toub-Inside-TPL-Dataflow

• Actor Model in Wikipedia https://en.wikipedia.org/wiki/Actor_model