Successfully reported this slideshow.
We use your LinkedIn profile and activity data to personalize ads and to show you more relevant ads. You can change your ad preferences anytime.

Параллельные вычисления в Perl 6

600 views

Published on

Краткий обзор возможностей Perl 6 для явного и неявного распараллеливания вычислений.

Published in: Technology
  • Be the first to comment

  • Be the first to like this

Параллельные вычисления в Perl 6

  1. 1. Perl 6
 для параллельных вычислений
  2. 2. The Parallel
 Features
 of the Perl Six
  3. 3. Parallel Futures
 of Perl 6
  4. 4. Предисловие
  5. 5. Интервью Pragmatic Perl в 2013–2015
  6. 6. Что, по-твоему, является наиболее важной особенностью языков будущего? Q:
  7. 7. Я не знаюA: Не знаю (2 ответа)
  8. 8. Нет хорошего ответаA: Не знаю (2 ответа)
  9. 9. Похожий на натуральный язык A: Синтаксис (1/3)
  10. 10. Здоровый минимализмA: Синтаксис (2/3)
  11. 11. РасширяемостьA: Синтаксис (3/3)
  12. 12. Гибкий и надежный вывод типов A: Объектная система (1/3)
  13. 13. НадежностьA: Объектная система (2/3)
  14. 14. Интроспекции самого языка A: Объектная система (3/3)
  15. 15. Поддержка JVMA: Среда (1/4)
  16. 16. Работа в браузереA: Среда (2/4)
  17. 17. Совместимость с другими языками A: Среда (3/4)
  18. 18. Возможность встраиваимости A: Среда (4/4)
  19. 19. СообществоA: Гуманизм (1/8)
  20. 20. ЧеловечностьA: Гуманизм (2/8)
  21. 21. Open sourceA: Гуманизм (3/8)
  22. 22. ПрагматизмA: Гуманизм (4/8)
  23. 23. Управляемость сознанием (sic!) A: Гуманизм (5/8)
  24. 24. Возможность просто объяснить задачу A: Гуманизм (6/8)
  25. 25. Легкость решения задач в предметной области A: Гуманизм (7/8)
  26. 26. НенавязчивостьA: Гуманизм (8/8)
  27. 27. Ответ номер 1
 Параллельность
  28. 28. ПараллелизмA: Параллельность (1/12)
  29. 29. Работа с распределенными ресурсами A: Параллельность (2/12)
  30. 30. ПараллелизмA: Параллельность (3/12)
  31. 31. Хорошая модель распараллеливания A: Параллельность (4/12)
  32. 32. Интуитивные корутины и поддержка многоядерности A: Параллельность (5/12)
  33. 33. ПараллелизмA: Параллельность (6/12)
  34. 34. Безопасность параллельных операций A: Параллельность (7/12)
  35. 35. Встроенная многопоточность A: Параллельность (8/12)
  36. 36. Качественная абстракция над сложной многопоточностью A: Параллельность (9/12)
  37. 37. ПараллелизмA: Параллельность (10/12)
  38. 38. Хороший параллелизмA: Параллельность (11/12)
  39. 39. МногозадачностьA: Параллельность (12/12)
  40. 40. Вернемся к Perl 6
  41. 41. Идея: прозрачность операций
  42. 42. Пользователь просто пользуется
  43. 43. Компилятор делает всю работу
  44. 44. Все примеры на Rakudo Star
  45. 45. Все примеры на Rakudo Star под MoarVM
  46. 46. Два типа параллельных возможностей
  47. 47. 1) неявные 2) явные
  48. 48. Операторы (кратко)
  49. 49. 1. Гипероператоры
  50. 50. Гипероператор это метаоператор
  51. 51. + оператор
  52. 52. += метаоператор
  53. 53. >>+<< гипероператор
  54. 54. »+« гипероператор
  55. 55. >>+ гипероператор
  56. 56. »+ гипероператор
  57. 57. >>+>> гипероператор
  58. 58. <<+<< гипероператор
  59. 59. «+« гипероператор
  60. 60. <<+>> гипероператор
  61. 61. «+» гипероператор
  62. 62. <<<>> гипероператор
  63. 63. «<» гипероператор
  64. 64. @c = @a >>+<< @b
  65. 65. @c = @a >>+<< @b @c[0] = @a[0] + @b[0];
  66. 66. @c = @a >>+<< @b @c[0] = @a[0] + @b[0]; @c[1] = @a[1] + @b[1];
  67. 67. @c = @a >>+<< @b @c[0] = @a[0] + @b[0]; @c[1] = @a[1] + @b[1]; @c[2] = @a[2] + @b[2];
  68. 68. @c = @a >>+>> 1
  69. 69. @c = @a >>+>> 1 @c[0] = @a[0] + 1;
  70. 70. @c = @a >>+>> 1 @c[0] = @a[0] + 1; @c[1] = @a[1] + 1;
  71. 71. @c = @a >>+>> 1 @c[0] = @a[0] + 1; @c[1] = @a[1] + 1; @c[2] = @a[2] + 1;
  72. 72. 2. Junctions
  73. 73. Или квантовые суперпозиции
  74. 74. Несколько значений как одно
  75. 75. my $j = 1 | 2 | 3 | 5;
  76. 76. my $j = 1 | 2 | 3 | 5; say 1 if 3 == $j;
  77. 77. my $j = 1 | 2 | 3 | 5; say 1 if 3 == $j;
  78. 78. my $j = 1 | 2 | 3 | 5; say 1 if 3 == $j;
  79. 79. my $j = 1 | 2 | 3 | 5; say 1 if 3 == $j; }
  80. 80. my $j = 1 | 2 | 3 | 5; say 1 if 3 == $j; }1
  81. 81. 3.
 Feeds
  82. 82. my @a = 1..10;
  83. 83. my @a = 1..10; @a ==> grep {$_ mod 2};
  84. 84. my @a = 1..10; @a ==> grep {$_ mod 2}; ! 1 3 5 7 9
  85. 85. my @a = 1..10; @a ==> grep {$_ mod 2} ==> map {$_ ** 2};
  86. 86. my @a = 1..10; @a ==> grep {$_ mod 2} ==> map {$_ ** 2}; ! 1 9 25 49 81
  87. 87. 4.
 Каналы
  88. 88. my $c = Channel.new;
  89. 89. my $c = Channel.new; $c.send(42);
  90. 90. my $c = Channel.new; $c.send(42); say $c.receive; ! 42
  91. 91. my $ch = Channel.new;
  92. 92. my $ch = Channel.new; for <1 3 5 7 9> { $ch.send($_); }
  93. 93. my $ch = Channel.new; for <1 3 5 7 9> { $ch.send($_); } while $ch.poll -> $x { say $x; }
  94. 94. 5.
 Промисы
  95. 95. my $p = Promise.new;
  96. 96. my $p = Promise.new; say $p.status;
 Planned
  97. 97. my $p = Promise.new; $p.keep;
  98. 98. my $p = Promise.new; $p.keep; say $p.status; ! Kept
  99. 99. my $p = Promise.new; $p.break;
  100. 100. my $p = Promise.new; $p.break; say $p.status; ! Broken
  101. 101. Фабричные методы
  102. 102. start
  103. 103. my $p = start {42};
  104. 104. my $p = start {42};
 say $p.WHAT;
 (Promise)
  105. 105. my $p1 = start {sleep 2};
  106. 106. my $p1 = start {sleep 2}; my $p2 = start {sleep 2};
  107. 107. my $p1 = start {sleep 2}; say $p1.status; my $p2 = start {sleep 2}; say $p2.status;
  108. 108. my $p1 = start {sleep 2}; say $p1.status; my $p2 = start {sleep 2}; say $p2.status; ! Planned Planned
  109. 109. my $p1 = start {sleep 2}; my $p2 = start {sleep 2}; sleep 3;
  110. 110. my $p1 = start {sleep 2}; my $p2 = start {sleep 2}; sleep 3; say $p1.status; say $p2.status;
  111. 111. my $p1 = start {sleep 2}; my $p2 = start {sleep 2}; sleep 3; say $p1.status say $p2.status Kept Kept
  112. 112. start
 блок кода для отложенного исполнения
  113. 113. in
  114. 114. my $p = Promise.in(3);
  115. 115. my $p = Promise.in(3); ! for 1..5 { say "$_ {$p.status}";
 sleep 1; }
  116. 116. my $p = Promise.in(3); ! for 1..5 { say "$_ {$p.status}";
 sleep 1; }
  117. 117. 1 Planned
  118. 118. 1 Planned 2 Planned
  119. 119. 1 Planned 2 Planned 3 Planned
  120. 120. 1 Planned 2 Planned 3 Planned 4 Kept
  121. 121. 1 Planned 2 Planned 3 Planned 4 Kept 5 Kept
  122. 122. Пример:
 Sleep Sort
  123. 123. ! for @*ARGS -> $a { ! ! ! ! }
  124. 124. ! for @*ARGS -> $a { ! ! ! ! }
  125. 125. ! for @*ARGS -> $a { @promises.push( Promise.in($a).then({ say $a; }) ); } ! await(|@promises);
  126. 126. my @promises; for @*ARGS -> $a { @promises.push( Promise.in($a).then({ say $a; }) ); } ! await(|@promises);
  127. 127. my @promises; for @*ARGS -> $a { @promises.push( Promise.in($a).then({ say $a; }) ); } ! await(|@promises);
  128. 128. my @promises; for @*ARGS -> $a { @promises.push( Promise.in($a).then({ say $a; }) ); } ! await(@promises);
  129. 129. $ ./sleep-sort.pl
  130. 130. $ ./sleep-sort.pl 3 1 2
  131. 131. $ ./sleep-sort.pl 3 1 2 1
  132. 132. $ ./sleep-sort.pl 3 1 2 1 2
  133. 133. $ ./sleep-sort.pl 3 1 2 1 2 3
  134. 134. Домашнее задание:
 каналы внутри промисов
  135. 135. Что еще:
 Schedulers
  136. 136. Что еще:
 Suppliers
  137. 137. Что еще:
 I/O и Suppliers
  138. 138. Что еще:
 Signals
  139. 139. Что еще:
 Threads
  140. 140. Что еще:
 Atomic
  141. 141. Что еще:
 Locks
  142. 142. Что еще:
 Semaphores
  143. 143. __END__
  144. 144. Андрей Шитов andy@shitov.ru май 2015

×