Каково различие между многоядерным программированием в Erlang и другим языком?

RadDatePicker только для получения даты вы используете RadDateTimePicker

Разметка:


Код

var selectedDate = abc.SelectedValue.Value.ToString("MM/dd/yyyy HH:mm:ss");  

ToString после выбора формата даты чем по этой ссылке

17
задан Community 23 May 2017 в 12:17
поделиться

5 ответов

Нет, это не невозможно, но Erlang действительно делает это намного легче. Ключ не совместно использует состояние среди процессов. Erlang достигает этого на основании его являющийся функциональным языком. Функция не должна иметь никаких побочных эффектов, и при этом она не должна получать доступ ни к какому переменному состоянию (кроме аргументов, передал стек). С этими свойствами вычисление любой функции в системе может отъехаться к другому процессору с отдельным пространством памяти, и Erlang сделает это для Вас. Erlang только должен копировать аргументы функции и результатам между пространствами памяти (примечание: это не подошло бы для всех видов приложений... функция, которая должна была воздействовать на очень большое тело состояния ввода, мог бы представить проблемы производительности при тиражировании того состояния).

А наивное использование потоков в приложении C++ могло бы иметь различные процессоры (в многоядерной системе) пытающийся получить доступ к той же общей памяти одновременно. Система тогда должна сделать большую работу, чтобы удостовериться, что локальные кэши, связанные с каждым ядром, остаются последовательными. Это - то, где можно перенести огромные хиты производительности. У нас есть приложение на работе, которая ухудшается в производительности, когда у Вас есть больше чем пара ядер по этой самой причине. На самом деле я сказал бы даже, что Вы будете более обеспечены для разработки приложений, чтобы только использовать потоки, где необходимо сделать асинхронный ввод-вывод, но где у Вас должны быть процессы, делающие реальную работу и не заблокированные для ввода-вывода, используйте полные процессы. При помощи полных процессов Вы гарантируете, что каждый процесс имеет свое собственное пространство памяти, и никакие два потока не будут использовать ту же память одновременно (конечно, тогда необходимо придумать хорошее средство передачи между теми процессами). С системой как это и дисциплина вокруг руководящего состояния и распределяющий обработку, Вы могли достигнуть подобных результатов к тому, что обеспечивает Erlang, но необходимо сделать, много инфраструктуры наполняет тот Erlang, уже делает для Вас.

15
ответ дан 30 November 2019 в 10:59
поделиться

Контекстное переключение является чрезвычайно дорогим. В Erlang нет ни одного. Блокировки заставляют традиционные программы начать думать, какой поток собирается выполниться затем. Это также чрезвычайно дорого.

3
ответ дан 30 November 2019 в 10:59
поделиться

Gordon Guthrie ответ является большим. То, где большее различие, является персональным предпочтением. С моей точки зрения большим различием в Erlang является надежность и случайный масштабируемость. В Erlang можно разработать параллельные процессы естественным способом без больших проблем производительности, и это будет интуитивной прозорливостью, масштабируемой распространяемое. Существуют ловушки в больших сообщениях и так но в большинстве случаев Ваш дизайн будет изящен и работает хорошо без особенного ухода. Когда Ваш дизайн изящен, Вы делаете меньше ошибок, это будет лучше управляемый, и случайно можно распределить и масштабироваться с минимальным усилием, и результат будет надежен.

Для резюме в Erlang можно разработать программу по-другому, чем в C++, потому что Вы можете сделать это без большой проблемы производительности и обещаете хорошую масштабируемость и надежность без большого усилия. Ничьим идеальным, но для интересно большой суммы задач Erlang является лучший выбор.

Редактирование : Хороший представление о различии между Erlang и C ++ - Erlang 2.5x большая главная производительность, 3x меньше задержки и 18x меньше SLOC - я предполагаю, что разработчики Motorola испытаны в C++ достаточно для записи хорошего программного обеспечения.

2
ответ дан 30 November 2019 в 10:59
поделиться

Ну, природа языка с переменными, которые могут только быть установлены однажды и то, что это - функциональный язык автоматически, заставляет программы с большим параллелизмом быть записанными и выполнила "правильный путь" к многоядерному.

я не знаю много о erlang помимо тех двух фактов, таким образом, могло бы быть что-то еще также. Но но это вовсе не значит Вы не можете сделать программу C++ как масштабируемую, но Вы, вероятно, пройдете много для достижения производительности, масштабируемости и устойчивости, которая прибудет без стоимости, если Вы запишете в erlang.

1
ответ дан 30 November 2019 в 10:59
поделиться

Это сводится потоки по сравнению с процессы .

Операционные системы были специально предназначены так, чтобы каждый 'пользователь' думал, что у них был целый компьютер себе - который является почему Вы выполненный апач как пользователь wwwrun , например.

Программисты, будучи программистами, начали перегружать ту парадигму, сначала каждым пользователем - человеком, выполняющим несколько 'заданий'. Поскольку операционные системы были разработаны для многочисленных пользователей, верхний предел масштабирования той архитектуры отразил, что верхний предел масштабирования для вошел в систему пользователи - который является, почему апач, например, начнет умирать в 4 000 - 8 000 пользователях.

Процессы являются зрелой парадигмой (мой процесс не может разрушить Ваш). Когда мы начинаем видеть введение потоков, хотя, вещи начинают становиться очень отличающимися. Здесь у нас есть программы, которые имеют внешние операции блокирования (ожидающий на диске, ожидающем на io, ожидающем на памяти) желание быть в состоянии ожидать, с одной стороны, и продолжают работать другой, и потоки позволяют Вам делать это и преодолевать две проблемы:

  • Вы не можете получить достаточно процессов, потому что операционная система не может обработать его

  • , каждый процесс является дорогим, потому что дизайном это дает 'пользователю' полную мощность операционной системы

, проблема с потоками состоит в том, что они повреждают разделение, для которого были разработаны процессы. Мой поток может повредить Ваш поток - ошибки распространяют.

то, Где Erlang отличается, находится во многих отношениях. Joe Armstrong диссертацию называют Делающие Надежные Распределенные системы В присутствии Программных ошибок .

, процессы средств Надежности лучше, чем потоки. Проблема состоит в том, что процессы операционных систем являются слишком 'дорогими', потому что они разработаны для людей (Вы владеете машиной), и не параллельные единицы программ. В Erlang VM VM имеет полную мощность многопользовательской системы (это работает в процессе операционной системы), и каждый процесс Erlang имеет намного меньший квант параллельного питания - если это хочет использовать 'большую машину', это говорит с VM, который делает это для него. Таким образом, процессы Erlang являются намного более дешевыми, чем работа процессами (и потоки). Вы просто мечете икру, мечете икру, икра. Из поля Erlang VM's запускаются с 2 ** 8 процессов, но можно ударить это до миллионов (если у Вас есть достаточно RAM).

кроме того, как Joe выразился в первой части первого Раздела его диссертации, чтобы иметь надежное программное обеспечение, которое необходимо запустить с двух компьютеров. С Erlang/OTP в время записи Вы не знаете, на каком компьютере Ваше программное обеспечение будет работать. Кластер Erlang/OTP, во время выполнения, выделит Вашу вычислительную работу. Таким образом, процесс Erlang собственный распределенный, как икра () (Erlang для ветвления ()) и семантика перезапуска.

, поскольку Erlang имеет свои собственные процессы, он имеет свой собственный планировщик, и его собственный загрузчик/двоичный формат кода (Erlang может быть интерпретирован, или он может скомпилировать в собственные двоичные файлы). Это тогда дает команду дополнительных выгод - перед записью приложения Erlang/OTP, оно может уже заменить свои двоичные файлы в горячем режиме, и т.д., и т.д.

Так, уверенный, что можно записать многопоточные приложения в C++ - но это - обязанность предотвратить устойчивость системы сборки и передача ошибок.

И уверенный, можно ли создать надежное программное обеспечение в C - смотрят на Erlang (VM записан в C), точка - то, почему Вы хотели бы? В былые дни компании записали свои собственные 'операционные системы', Вы могли записать свою собственную операционную систему теперь, но почему Вы захотите? Существуют миллионы строк устойчивого протестированного кода, который 'делает это', точно так же, как существуют строки на 1.5 м устойчивого протестированного кода в системе Erlang/OTP, которая 'делает это'.

Используя Erlang об использовании вещей, которые другие люди записали и только создание битов, которые делают Вашу компанию эффективной.

25
ответ дан 30 November 2019 в 10:59
поделиться
Другие вопросы по тегам:

Похожие вопросы: