½ (, # (/ ! TPL Dataflowit-perspektiva.altexsoft.com/past-years/documents... · ¯ * -= 8/ & -((:...
Transcript of ½ (, # (/ ! TPL Dataflowit-perspektiva.altexsoft.com/past-years/documents... · ¯ * -= 8/ & -((:...
![Page 1: ½ (, # (/ ! TPL Dataflowit-perspektiva.altexsoft.com/past-years/documents... · ¯ * -= 8/ & -((: & #(! (o}Á ¥#(! *, (-/ #A@/, # 8&< -*(-(< * - 8/ & A-((: & ª %&-/, 6 A](https://reader030.fdocument.pub/reader030/viewer/2022041023/5ed619bebcb22c51e262108b/html5/thumbnails/1.jpg)
О о л отек TPL Dataflow
![Page 2: ½ (, # (/ ! TPL Dataflowit-perspektiva.altexsoft.com/past-years/documents... · ¯ * -= 8/ & -((: & #(! (o}Á ¥#(! *, (-/ #A@/, # 8&< -*(-(< * - 8/ & A-((: & ª %&-/, 6 A](https://reader030.fdocument.pub/reader030/viewer/2022041023/5ed619bebcb22c51e262108b/html5/thumbnails/2.jpg)
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](https://reader030.fdocument.pub/reader030/viewer/2022041023/5ed619bebcb22c51e262108b/html5/thumbnails/3.jpg)
Модел кто о Это те т е к одел п ллел ле кото о
кто л ет л тел о у о т . кто о ет: • п т оо е от д у кто о
• отп т оо е д у кто
• о д т о е кто
• пол т к ку -л о п у у кто у оту
• ет о то е
кто п у ут е п ллел
кто ол о д у от д у
кто оде т у т д у д у о путё о е а и х о ы и оо е
![Page 4: ½ (, # (/ ! TPL Dataflowit-perspektiva.altexsoft.com/past-years/documents... · ¯ * -= 8/ & -((: & #(! (o}Á ¥#(! *, (-/ #A@/, # 8&< -*(-(< * - 8/ & A-((: & ª %&-/, 6 A](https://reader030.fdocument.pub/reader030/viewer/2022041023/5ed619bebcb22c51e262108b/html5/thumbnails/4.jpg)
К т к те ет
![Page 5: ½ (, # (/ ! TPL Dataflowit-perspektiva.altexsoft.com/past-years/documents... · ¯ * -= 8/ & -((: & #(! (o}Á ¥#(! *, (-/ #A@/, # 8&< -*(-(< * - 8/ & A-((: & ª %&-/, 6 A](https://reader030.fdocument.pub/reader030/viewer/2022041023/5ed619bebcb22c51e262108b/html5/thumbnails/5.jpg)
о одел
о у о т – лок 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](https://reader030.fdocument.pub/reader030/viewer/2022041023/5ed619bebcb22c51e262108b/html5/thumbnails/6.jpg)
Д те е о
![Page 7: ½ (, # (/ ! TPL Dataflowit-perspektiva.altexsoft.com/past-years/documents... · ¯ * -= 8/ & -((: & #(! (o}Á ¥#(! *, (-/ #A@/, # 8&< -*(-(< * - 8/ & A-((: & ª %&-/, 6 A](https://reader030.fdocument.pub/reader030/viewer/2022041023/5ed619bebcb22c51e262108b/html5/thumbnails/7.jpg)
п те е оо е лок 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](https://reader030.fdocument.pub/reader030/viewer/2022041023/5ed619bebcb22c51e262108b/html5/thumbnails/8.jpg)
е локо
• лок о о т , о у ко е е л
• Од лок то к о о т о е т о локо п ё ко • Од лок п ё к о о т о е т о локо
то ко
• И пол ует етод ISourceBlock<TOutput>.LinkTo
• Метод LinkTo допол тел о о ет п т п ед к т, по ол л т о т оо е
![Page 9: ½ (, # (/ ! TPL Dataflowit-perspektiva.altexsoft.com/past-years/documents... · ¯ * -= 8/ & -((: & #(! (o}Á ¥#(! *, (-/ #A@/, # 8&< -*(-(< * - 8/ & A-((: & ª %&-/, 6 A](https://reader030.fdocument.pub/reader030/viewer/2022041023/5ed619bebcb22c51e262108b/html5/thumbnails/9.jpg)
е локо - де о т 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](https://reader030.fdocument.pub/reader030/viewer/2022041023/5ed619bebcb22c51e262108b/html5/thumbnails/10.jpg)
едоп еделё е лок
О дел т 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](https://reader030.fdocument.pub/reader030/viewer/2022041023/5ed619bebcb22c51e262108b/html5/thumbnails/11.jpg)
Бу е е лок (buffering blocks)
![Page 12: ½ (, # (/ ! TPL Dataflowit-perspektiva.altexsoft.com/past-years/documents... · ¯ * -= 8/ & -((: & #(! (o}Á ¥#(! *, (-/ #A@/, # 8&< -*(-(< * - 8/ & A-((: & ª %&-/, 6 A](https://reader030.fdocument.pub/reader030/viewer/2022041023/5ed619bebcb22c51e262108b/html5/thumbnails/12.jpg)
BufferBlock<T>
• е л ует о е ед FIFO о е о е
• оо е о ут п од т о е т то ко у у од т о о е т о п ё ко п то к дое оо е е поп д ет
тол ко од п ё к
• оле е е л т е ует т о до т к е оо е оп еделё п ё к
![Page 13: ½ (, # (/ ! TPL Dataflowit-perspektiva.altexsoft.com/past-years/documents... · ¯ * -= 8/ & -((: & #(! (o}Á ¥#(! *, (-/ #A@/, # 8&< -*(-(< * - 8/ & A-((: & ª %&-/, 6 A](https://reader030.fdocument.pub/reader030/viewer/2022041023/5ed619bebcb22c51e262108b/html5/thumbnails/13.jpg)
BroadcastBlock<T> • оле е , ко д у о пе ед т к дое оо е е е п ё к
• Т к е поле е , ко д т е ует пе ед т о е т о оо е оп еделё о у п ё ку п то п ё ку е д т е ует тол ко ое по лед ее оо е е т. е. е ол ует поте оо е
![Page 14: ½ (, # (/ ! TPL Dataflowit-perspektiva.altexsoft.com/past-years/documents... · ¯ * -= 8/ & -((: & #(! (o}Á ¥#(! *, (-/ #A@/, # 8&< -*(-(< * - 8/ & A-((: & ª %&-/, 6 A](https://reader030.fdocument.pub/reader030/viewer/2022041023/5ed619bebcb22c51e262108b/html5/thumbnails/14.jpg)
WriteOnceBlock<T>
• Я л ет т лу е Broad astBlo k<T>
• Отл е о то т то то е о о о п т е о од о оо е е
![Page 15: ½ (, # (/ ! TPL Dataflowit-perspektiva.altexsoft.com/past-years/documents... · ¯ * -= 8/ & -((: & #(! (o}Á ¥#(! *, (-/ #A@/, # 8&< -*(-(< * - 8/ & A-((: & ª %&-/, 6 A](https://reader030.fdocument.pub/reader030/viewer/2022041023/5ed619bebcb22c51e262108b/html5/thumbnails/15.jpg)
пол тел е лок (execution blocks)
![Page 16: ½ (, # (/ ! TPL Dataflowit-perspektiva.altexsoft.com/past-years/documents... · ¯ * -= 8/ & -((: & #(! (o}Á ¥#(! *, (-/ #A@/, # 8&< -*(-(< * - 8/ & A-((: & ª %&-/, 6 A](https://reader030.fdocument.pub/reader030/viewer/2022041023/5ed619bebcb22c51e262108b/html5/thumbnails/16.jpg)
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](https://reader030.fdocument.pub/reader030/viewer/2022041023/5ed619bebcb22c51e262108b/html5/thumbnails/17.jpg)
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](https://reader030.fdocument.pub/reader030/viewer/2022041023/5ed619bebcb22c51e262108b/html5/thumbnails/18.jpg)
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](https://reader030.fdocument.pub/reader030/viewer/2022041023/5ed619bebcb22c51e262108b/html5/thumbnails/19.jpg)
У о е п ллел
о у ол е пол тел е лок о т т тол ко од о оо е е од о е е о
о еде е по-у ол о о е т , д у о е п ллел – то по ол ет о т т од о е е о
о е т о оо е е
![Page 20: ½ (, # (/ ! TPL Dataflowit-perspektiva.altexsoft.com/past-years/documents... · ¯ * -= 8/ & -((: & #(! (o}Á ¥#(! *, (-/ #A@/, # 8&< -*(-(< * - 8/ & A-((: & ª %&-/, 6 A](https://reader030.fdocument.pub/reader030/viewer/2022041023/5ed619bebcb22c51e262108b/html5/thumbnails/20.jpg)
Г упп у е лок (grouping blocks)
![Page 21: ½ (, # (/ ! TPL Dataflowit-perspektiva.altexsoft.com/past-years/documents... · ¯ * -= 8/ & -((: & #(! (o}Á ¥#(! *, (-/ #A@/, # 8&< -*(-(< * - 8/ & A-((: & ª %&-/, 6 A](https://reader030.fdocument.pub/reader030/viewer/2022041023/5ed619bebcb22c51e262108b/html5/thumbnails/21.jpg)
BatchBlock<T>
Ко ует од е оо е п кет д о о е отд ёт к е т е од оо е
![Page 22: ½ (, # (/ ! TPL Dataflowit-perspektiva.altexsoft.com/past-years/documents... · ¯ * -= 8/ & -((: & #(! (o}Á ¥#(! *, (-/ #A@/, # 8&< -*(-(< * - 8/ & A-((: & ª %&-/, 6 A](https://reader030.fdocument.pub/reader030/viewer/2022041023/5ed619bebcb22c51e262108b/html5/thumbnails/22.jpg)
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](https://reader030.fdocument.pub/reader030/viewer/2022041023/5ed619bebcb22c51e262108b/html5/thumbnails/23.jpg)
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](https://reader030.fdocument.pub/reader030/viewer/2022041023/5ed619bebcb22c51e262108b/html5/thumbnails/24.jpg)
е д о т (greedy mode)
упп у е лок о ут от т д о е- д о е
BatchBlock (4)
![Page 25: ½ (, # (/ ! TPL Dataflowit-perspektiva.altexsoft.com/past-years/documents... · ¯ * -= 8/ & -((: & #(! (o}Á ¥#(! *, (-/ #A@/, # 8&< -*(-(< * - 8/ & A-((: & ª %&-/, 6 A](https://reader030.fdocument.pub/reader030/viewer/2022041023/5ed619bebcb22c51e262108b/html5/thumbnails/25.jpg)
е д о т (greedy mode)
• д о е е по-у ол о п т е оо е
• е- д о е е о откл д т оо е -пото пок оде е удет до т то ое кол е т о оо е то
о о т од ое оо е е
• Это д ёт о о о т отд т т оо е д у лок е л т ко е е т )
При еча ие. одо о о по еде т к- е о о до т у т л о т о BoundedCapacity – к л е
од е о у е оо е – о о до туп о дл е локо е тол ко упп у
![Page 26: ½ (, # (/ ! TPL Dataflowit-perspektiva.altexsoft.com/past-years/documents... · ¯ * -= 8/ & -((: & #(! (o}Á ¥#(! *, (-/ #A@/, # 8&< -*(-(< * - 8/ & A-((: & ª %&-/, 6 A](https://reader030.fdocument.pub/reader030/viewer/2022041023/5ed619bebcb22c51e262108b/html5/thumbnails/26.jpg)
о д е о т е локо
• Мо о о у е л о т те е 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](https://reader030.fdocument.pub/reader030/viewer/2022041023/5ed619bebcb22c51e262108b/html5/thumbnails/27.jpg)
Де о
![Page 28: ½ (, # (/ ! TPL Dataflowit-perspektiva.altexsoft.com/past-years/documents... · ¯ * -= 8/ & -((: & #(! (o}Á ¥#(! *, (-/ #A@/, # 8&< -*(-(< * - 8/ & A-((: & ª %&-/, 6 A](https://reader030.fdocument.pub/reader030/viewer/2022041023/5ed619bebcb22c51e262108b/html5/thumbnails/28.jpg)
д
• о д о по ко о т оке тек т т о е по о по ко о о е д о де о пол ует Bing • К дое де ое о е е о от т леду
о о : • о URL- д е у о е о о т QR-код
• М т о т о е е, е у ло т QR-код ло от п
• е т п ок е ул т у о е
![Page 29: ½ (, # (/ ! TPL Dataflowit-perspektiva.altexsoft.com/past-years/documents... · ¯ * -= 8/ & -((: & #(! (o}Á ¥#(! *, (-/ #A@/, # 8&< -*(-(< * - 8/ & A-((: & ª %&-/, 6 A](https://reader030.fdocument.pub/reader030/viewer/2022041023/5ed619bebcb22c51e262108b/html5/thumbnails/29.jpg)
о тое по ледо тел ое е е е
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](https://reader030.fdocument.pub/reader030/viewer/2022041023/5ed619bebcb22c51e262108b/html5/thumbnails/30.jpg)
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](https://reader030.fdocument.pub/reader030/viewer/2022041023/5ed619bebcb22c51e262108b/html5/thumbnails/31.jpg)
лк
• 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