|
|
|
Clojure использует синхронизацию или volatile?
|
|||
|---|---|---|---|
|
#18+
Про clojure говорится что она использует персистентные структуры данных и поэтому свободна от проблем с мультитредингом и синхронизацией. Но, даже иммутабельные (или персистентные) объекты нужно както создавать. И мне непонятно как это можно сделать тредсейф без синхронизации. Потому что в жава без синхронизации (или волатайл) нельзя даже создать обьект так чтобы это было потокобезопасно. Кому интересно детали по ссылке http://www.cs.umd.edu/~pugh/java/memoryModel/DoubleCheckedLocking.html Так как-же они тогда делают это в кложуре без синхронизации? Или они таки ее используют? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 07.11.2014, 16:47 |
|
||
|
Clojure использует синхронизацию или volatile?
|
|||
|---|---|---|---|
|
#18+
Уточню вопрос, понятно что в кложуре не нужно писать синхронизацию явно и нет проблем с дедлоками. Вопрос в том что если она использует синхронизацию или волатайл неявно внутри - то будут потери в производительности - и получается что это какбы не совсем чистая неблокирующая многопоточность. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 07.11.2014, 16:51 |
|
||
|
Clojure использует синхронизацию или volatile?
|
|||
|---|---|---|---|
|
#18+
privateПро clojure говорится что она использует персистентные структуры данных и поэтому свободна от проблем с мультитредингом и синхронизацией. Ссылку можно? Где говориться-то? Это не фишка clojure. Это свойство большинста сильно функциональных языков. privateНо, даже иммутабельные (или персистентные) объекты нужно както создавать. И мне непонятно как это можно сделать тредсейф без синхронизации. Персистентные структуры это не тоже самое что immutable http://en.wikipedia.org/wiki/Persistent_data_structure Смешивать не нужно. privateПотому что в жава без синхронизации (или волатайл) нельзя даже создать обьект так чтобы это было потокобезопасно. Уже много лет как можно. privateКому интересно детали по ссылке http://www.cs.umd.edu/~pugh/java/memoryModel/DoubleCheckedLocking.html С разморозкой. privateТак как-же они тогда делают это в кложуре без синхронизации? Или они таки ее используют? Когда надо - используют. Просто функциональное программирование использует другие подходы. Поэтому хранить общедоступное для разных потоков состояние там приходится реже. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 07.11.2014, 17:00 |
|
||
|
Clojure использует синхронизацию или volatile?
|
|||
|---|---|---|---|
|
#18+
privateУточню вопрос, понятно что в кложуре не нужно писать синхронизацию явно и нет проблем с дедлоками. Это тогда чиво такое? https://clojuredocs.org/clojure.core/locking privateВопрос в том что если она использует синхронизацию или волатайл неявно внутри - то будут потери в производительности - и получается что это какбы не совсем чистая неблокирующая многопоточность. Блин. Суть вообще не в том. Используй immutable структуры в Java и у тебя тоже будет меньше проблем с многопоточностью, как следствие того, что все ресурсы разделены между потоками. И конкуренция сводится к минимуму. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 07.11.2014, 17:03 |
|
||
|
Clojure использует синхронизацию или volatile?
|
|||
|---|---|---|---|
|
#18+
Вот, на вскидку, статья из гугла, полностью повторяет то что я написал. https://miles.no/blogg/why-care-about-functional-programming-part-1-immutability Unlike traditional object-oriented languages, functional programming, by its very nature, encourages us to write thread-safe code . Это не значит, что там нет блокировок, волатильности и прочих прелестей. Просто функциональный подход минимизирует надобность в конкуренции. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 07.11.2014, 17:05 |
|
||
|
Clojure использует синхронизацию или volatile?
|
|||
|---|---|---|---|
|
#18+
private, а так будет безопасно ? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 07.11.2014, 17:13 |
|
||
|
Clojure использует синхронизацию или volatile?
|
|||
|---|---|---|---|
|
#18+
builder паттерн http://habrahabr.ru/post/86252/ ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 07.11.2014, 17:14 |
|
||
|
Clojure использует синхронизацию или volatile?
|
|||
|---|---|---|---|
|
#18+
BlazkowiczprivateУточню вопрос, понятно что в кложуре не нужно писать синхронизацию явно и нет проблем с дедлоками. Это тогда чиво такое? https://clojuredocs.org/clojure.core/locking Ссылка не открывается. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 07.11.2014, 17:43 |
|
||
|
Clojure использует синхронизацию или volatile?
|
|||
|---|---|---|---|
|
#18+
YamahaR1Ссылка не открывается. Это провайдеру надо жаловаться, а не на форум писать. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 07.11.2014, 17:45 |
|
||
|
Clojure использует синхронизацию или volatile?
|
|||
|---|---|---|---|
|
#18+
BlazkowiczYamahaR1Ссылка не открывается. Это провайдеру надо жаловаться, а не на форум писать. Упс, сорри. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 07.11.2014, 17:50 |
|
||
|
Clojure использует синхронизацию или volatile?
|
|||
|---|---|---|---|
|
#18+
Вы концентрируетеь на деталях, да персистентные и иммутабельные структуры данных не совсем одно и тоже и да функциональный стиль меньше требует разделения памяти и тд И да в кложуре тоже есть и локи и атомы и тп которые тоже нужны хоть и реже. Забудем на секунду все эти локи и атомы в кложуре и представил что мы ничего о них не знаем и не используем. Вопрос - использует ли кложур синхронайз/волатайл при создании нового объекта (модификации персистентной структуры данных)? Внутри, когда она создает новую вершину персистентного дерева, в его внутренней жавовской реализации? авторУже много лет как можно.Как? Только не синглтон с загрузкой класса. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 07.11.2014, 18:34 |
|
||
|
Clojure использует синхронизацию или volatile?
|
|||
|---|---|---|---|
|
#18+
privateПро clojure говорится что она использует персистентные структуры данных и поэтому свободна от проблем с мультитредингом и синхронизацией. Но, даже иммутабельные (или персистентные) объекты нужно както создавать. И мне непонятно как это можно сделать тредсейф без синхронизации. Потому что в жава без синхронизации (или волатайл) нельзя даже создать обьект так чтобы это было потокобезопасно. Кому интересно детали по ссылке http://www.cs.umd.edu/~pugh/java/memoryModel/DoubleCheckedLocking.html Так как-же они тогда делают это в кложуре без синхронизации? Или они таки ее используют? Персистентные структры данных сами по себе не решают проблемы с мультитредингом т.к. проблему утеренного обновления они игнорируют. Есть атомы (т.е. фактически compare-and-set) и STM, который построен на ReetrantReadWriteLock-ах(год назад точно был, может сейчас правда переписали). ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 07.11.2014, 18:41 |
|
||
|
Clojure использует синхронизацию или volatile?
|
|||
|---|---|---|---|
|
#18+
privateВы концентрируетеь на деталях, да персистентные и иммутабельные структуры данных не совсем одно и тоже и да функциональный стиль меньше требует разделения памяти и тд И да в кложуре тоже есть и локи и атомы и тп которые тоже нужны хоть и реже. Так задай вопрос внятно. Ты же первый каким-то образом связал иммутаблельность с отсутствеим дедлоков. privateЗабудем на секунду все эти локи и атомы в кложуре и представил что мы ничего о них не знаем и не используем. Вопрос - использует ли кложур синхронайз/волатайл при создании нового объекта (модификации персистентной структуры данных)? Внутри, когда она создает новую вершину персистентного дерева, в его внутренней жавовской реализации? То эта вершина видна одному потоку, который её создал. Когда он с ней закончит - может передать другому. Но как только возникает конкуренция, тут же надо руками синхронизировать. Берем тот же синглтон, который ты зачем-то приплел к вопросу http://www.clodoc.org/doc/clojure.contrib.singleton/global-singleton Warning: global singletons are often unsafe in multi-threaded code. Consider per-thread-singleton instead. privateКак? Только не синглтон с загрузкой класса. Новые гарантии в JMM. Сначала для volatile, потом для final. Уже разжевано-пережовано где только можно http://habrahabr.ru/post/27108/ http://habrahabr.ru/post/129494/ ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 07.11.2014, 18:49 |
|
||
|
Clojure использует синхронизацию или volatile?
|
|||
|---|---|---|---|
|
#18+
privateУточню вопрос, понятно что в кложуре не нужно писать синхронизацию явно и нет проблем с дедлоками. Вопрос в том что если она использует синхронизацию или волатайл неявно внутри - то будут потери в производительности - и получается что это какбы не совсем чистая неблокирующая многопоточность. Любая реализация STM плохо масштабируется в принципе т.к. завершиться может только одна группа операций, а остальные должны перезапуститься и выполниться заново. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 07.11.2014, 18:52 |
|
||
|
Clojure использует синхронизацию или volatile?
|
|||
|---|---|---|---|
|
#18+
Да, ссылка на создаваемую вершину в кложуре будет видна только потоку который ее создает, получается что можно обойтись без синхронизации. Те допустим есть хешмеп, в кложуре, тогда если я не использую локов, атомов и стм, то операции get/put не должны использовать какихто внутренних синхронизаций или волатайл в своей жава имплементации? авторНовые гарантии в JMM. Сначала для volatile, потом для final. Уже разжевано-пережовано где только можномы уже целую страницу обсуждаем можно ли создать объект без синхронайз/волатайл - а в примере предлагается его использовать, причем в этой же статье говориться что волатайл может иметь проблемы с производительность. Те получается что без волатайл тредбезопасно создать объект (не интеджер или стринг) нельзя. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 07.11.2014, 19:15 |
|
||
|
Clojure использует синхронизацию или volatile?
|
|||
|---|---|---|---|
|
#18+
Перепишу вопрос понятней. Допустим есть хешмеп, в кложуре, тогда если я не использую локов, атомов и стм, то операции get/put не должны использовать какихто внутренних синхронизаций или волатайл в своей внутренней жава имплементации? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 07.11.2014, 19:16 |
|
||
|
Clojure использует синхронизацию или volatile?
|
|||
|---|---|---|---|
|
#18+
privateТе получается что без волатайл тредбезопасно создать объект (не интеджер или стринг) нельзя. Фак мой моск. Ты всё мешаешь в кучу. Есть многопоточный доступ к mutable ссылке? Значит создать в ней значение безопасно нельзя. Поэтому Clojure предлагает этого не делать вообще! А создавать объекты внутри потоков без volatile и не шарить эти объекты в другие потоки, пока не закончится работа в текущем. Создать объект одним потоком безопасно и без volatile. Главное не шарить этот объект в другие потоки. Нет никакой магии. Все те же мониторы\семафоры\CAS\барьеры\задвижки всё работает на одном и том же железе. Не важно на функциональном языке написано или на процедурном. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 07.11.2014, 19:20 |
|
||
|
Clojure использует синхронизацию или volatile?
|
|||
|---|---|---|---|
|
#18+
privateПерепишу вопрос понятней. Допустим есть хешмеп, в кложуре, тогда если я не использую локов, атомов и стм, то операции get/put не должны использовать какихто внутренних синхронизаций или волатайл в своей внутренней жава имплементации? Он их не использует для этих операций вне зависимости от того, используются локи, атомы или стм. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 07.11.2014, 19:23 |
|
||
|
Clojure использует синхронизацию или volatile?
|
|||
|---|---|---|---|
|
#18+
Blazkowicz https://miles.no/blogg/why-care-about-functional-programming-part-1-immutability Unlike traditional object-oriented languages, functional programming, by its very nature, encourages us to write thread-safe code . А такие клевая статья. Там и вторая часть есть по близкой теме. http://miles.no/blogg/why-should-we-care-about-functional-programming-part-2-transformations ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 07.11.2014, 19:42 |
|
||
|
Clojure использует синхронизацию или volatile?
|
|||
|---|---|---|---|
|
#18+
schwaprivateПерепишу вопрос понятней. Допустим есть хешмеп, в кложуре, тогда если я не использую локов, атомов и стм, то операции get/put не должны использовать какихто внутренних синхронизаций или волатайл в своей внутренней жава имплементации? Он их не использует для этих операций вне зависимости от того, используются локи, атомы или стм.Спасибо, ясно. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 07.11.2014, 20:05 |
|
||
|
|

start [/forum/topic.php?fid=59&msg=38798958&tid=2126313]: |
0ms |
get settings: |
6ms |
get forum list: |
11ms |
check forum access: |
2ms |
check topic access: |
2ms |
track hit: |
154ms |
get topic data: |
6ms |
get forum data: |
1ms |
get page messages: |
35ms |
get tp. blocked users: |
1ms |
| others: | 204ms |
| total: | 422ms |

| 0 / 0 |
