Наши проекты:
Журнал · Discuz!ML · Wiki · DRKB · Помощь проекту |
||
ПРАВИЛА | FAQ | Помощь | Поиск | Участники | Календарь | Избранное | RSS |
[3.142.136.159] |
|
Страницы: (56) « Первая ... 34 35 [36] 37 38 ... 55 56 ( Перейти к последнему сообщению ) |
Сообщ.
#526
,
|
|
|
Цитата D_KEY @ Поэкспериментировать на какую тему? Можешь придумать похожую на твою, но более простую задачку, чтобы можно было поэкспериментировать? |
Сообщ.
#527
,
|
|
|
Цитата applegame @ Цитата D_KEY @ Поэкспериментировать на какую тему?Можешь придумать похожую на твою, но более простую задачку, чтобы можно было поэкспериментировать? Ну на тему иммутабельности, GC, RC, разделяемых ресурсов, очередей/каналов и пр. Там видно будет. |
Сообщ.
#528
,
|
|
|
Цитата D_KEY @ Я не знаю. Я пытался как-то описать задачу более-менее полно, но все равно получается достаточно сложно. Ну на тему иммутабельности, GC, RC, разделяемых ресурсов, очередей/каналов и пр. Там видно будет. Добавлено Кроме того нас ограничивает внешнее 3rd party API. Если бы не оно мы могли бы вообще отказаться от совместного доступа к объектам, передавая только их уникальные идентификаторы. |
Сообщ.
#529
,
|
|
|
Цитата applegame @ Цитата D_KEY @ Я не знаю. Я пытался как-то описать задачу более-менее полно, но все равно получается достаточно сложно.Ну на тему иммутабельности, GC, RC, разделяемых ресурсов, очередей/каналов и пр. Там видно будет. Да нужно что-то более конкретное. Т.е. обозначить, что за контейнер, как данные туда попадают, как удаляются, кто, как и когда их читает и что, собственно, с этими данными делает. Что-то надо придумать. Тогда можем поиграться(в том числе и на Go вариант может появиться). |
Сообщ.
#530
,
|
|
|
Цитата D_KEY @ А смысл? Проверить что быдет быстрее GC или RC? Придумай сам что-нибудь с передачами групп объектов и типа их обработкой Я-то свою задачу решил и решение работает хорошо и, главное, поддерживается и расширяется тоже хорошо. Могут быть проблемы с масштабированием, но я полагаю, что мы вряд ли в обозримом будущем упремся в потолок текущей архитектуры. Да нужно что-то более конкретное. Т.е. обозначить, что за контейнер, как данные туда попадают, как удаляются, кто, как и когда их читает и что, собственно, с этими данными делает. Что-то надо придумать. Тогда можем поиграться(в том числе и на Go вариант может появиться). |
Сообщ.
#531
,
|
|
|
Цитата applegame @ Придумай сам что-нибудь с передачами групп объектов и типа их обработкой Это можно. Но нам тут нужно, чтобы "обработка" была на одних и тех же данных много раз(и параллельно эти данные могут исключить из контейнера), причем данные должны быть достаточно большими, чтобы мы обеспокоились стоимостью копирования. Вот пока не придумывается ничего. |
Сообщ.
#532
,
|
|
|
Цитата applegame @ я полагаю, что мы вряд ли в обозримом будущем упремся в потолок текущей архитектуры Так а какова сама задача, для которой была придумана такая архитектура? |
Сообщ.
#533
,
|
|
|
То что мне приходит в голову не требует копирования или совместного доступа, достаточно обмениваться уникальными идентификаторами, что в общем-то не эффективней обмена сырыми указателями, но зато не требует GC. Разве что прописать в условиях задачи необходимость полного доступа к объекту в потоках.
Добавлено Цитата MyNameIsIgor @ Подробности разглашать не могу, так как оно коммерческое и проприетарное. Так а какова сама задача, для которой была придумана такая архитектура? |
Сообщ.
#534
,
|
|
|
Цитата applegame @ То что мне приходит в голову не требует копирования или совместного доступа, достаточно обмениваться уникальными идентификаторами Это не то же самое, ибо тогда получившие идентификатор не будут владеть данными. Со сборщиком мусора или подсчётом ссылок они ими владеют, даже если данные удалены из контейнера. Добавлено Цитата applegame @ Подробности разглашать не могу, так как оно коммерческое и проприетарное. Эммм... Ну, хз, конечно... Но что тайного, например, в такой формулировке "сервис должен получать такие-то запросы (примерная вероятность, периодичность) и отдавать такие-то ответы"? |
Сообщ.
#535
,
|
|
|
Цитата MyNameIsIgor @ Я и не говорил, что это одно и тоже. Я имел в виду, что упрощенный пример задачи пришедший мне в голову не требует владения/совместного доступа, а достаточно идентификатора. Это не то же самое, ибо тогда получившие идентификатор не будут владеть данными. Со сборщиком мусора или подсчётом ссылок они ими владеют, даже если данные удалены из контейнера. Добавлено Цитата MyNameIsIgor @ Проблема в том, что в такой трактовке это будет слабо связано с реальной задачей. То есть если мы подберем наиболее удачный алгоритм, совершенно не факт, что он будет удачным в нашем реальном проекте. Но я попробую сформулировать нечто попроще. Будет эдакий многопоточный бенчмарк, пусть даже не похожий на реальный проект. Такое устроит? Но что тайного, например, в такой формулировке "сервис должен получать такие-то запросы (примерная вероятность, периодичность) и отдавать такие-то ответы"? |
Сообщ.
#536
,
|
|
|
Цитата applegame @ Проблема в том, что в такой трактовке это будет слабо связано с реальной задачей. То есть если мы подберем наиболее удачный алгоритм, совершенно не факт, что он будет удачным в нашем реальном проекте. Ну, я имел в виду, что можно отделить то, что попадает под соглашение о неразглашении (форматы данных, область применения, алгоритмы и т.д.), от чисто технических подробностей - измеряемых параметров, которым должен удовлетворять сервис. Цитата applegame @ Но я попробую сформулировать нечто попроще. Будет эдакий многопоточный бенчмарк, пусть даже не похожий на реальный проект. Такое устроит? На мой взгляд, упрощать важно хотя бы потому, что не у всех будет время и желание не на работе писать много кода чисто для эксперимента. |
Сообщ.
#537
,
|
|
|
Цитата applegame @ Наверное думал, раз написал: Цитата korvin @ Нет, указатель может стать невалидным, если поток-владелец вызвал деструктор объекта, пока поток, получивший от него указатель на данные, ещё не завершился. Или решил, что речь идет о C++. Но тогда стоило бы написать, что ты говорил о другом языке, вместо благодарностей капитанам, нет? Мы же обсуждали указатели и владение памятью при использовании иммутабельных объектов в многопоточной среде в языках без GC. Прямая: - с GC владельцем является GC и он же освобождает память. Т.е. имея ссылку на один и тот же ресурс оба потока будут иметь её до тех пор пока оба не завершаться. - Без GC программист сам выбирает политику владения памятью и организовывает совместный доступ таким образом, чтобы не было дыр, позволяющих привести систему к некорректному состоянию. Вот тебя не устраивает smart_ptr из-за каких-то там проблем, я тебе предлагаю [не использовать smart_ptr и не шарить сам ресурс напрямую (через какие бы то ни было указатели вообще)] и не иметь этих проблем. Добавлено Давай хоть для начала определимся, что это за ресурс. |
Сообщ.
#538
,
|
|
|
Цитата korvin @ Я полагал, что мы обсуждаем замену иммутабельным объектам в языке с GC.Мы же обсуждали указатели и владение памятью при использовании иммутабельных объектов в многопоточной среде в языках без GC. Цитата korvin @ Как ты там говорил? Спасибо, кэп. Но владение ресурсом и совместный доступ - понятия ортогональные. Совместный доступ - проблема синхронизации, владение ресурсом - проблема времени жизни ресурса.Прямая: - с GC владельцем является GC и он же освобождает память. Т.е. имея ссылку на один и тот же ресурс оба потока будут иметь её до тех пор пока оба не завершаться. - Без GC программист сам выбирает политику владения памятью и организовывает совместный доступ таким образом, чтобы не было дыр, позволяющих привести систему к некорректному состоянию. Цитата korvin @ Я такого не говрил. Я говорил что по крайней мере в моем проекте immutable + GC удобнее, чем shared_ptr и может быть эффективней. А ты как-то странно заявил, что совместный доступ не нужен, если владелец всего один. Прямо вот совсем никогда не нужен? Создал объект в одном потоке раздал указатель на него еще десятерым, подождал пока они завершаться, уничтожил объект. Вот тебе схема с одним владельцем и совместным доступом.Вот тебя не устраивает smart_ptr из-за каких-то там проблем, я тебе предлагаю [не использовать smart_ptr и не шарить сам ресурс напрямую (через какие бы то ни было указатели вообще)] и не иметь этих проблем. В любом случае я тебя понял, такой вариант не всегда удобен и эффективен, но кое-где я его применяю. |
Сообщ.
#539
,
|
|
|
Цитата applegame @ Но владение ресурсом и совместный доступ - понятия ортогональные. Нет, если доступ требует владения, как в случае с shared_ptr. Добавлено Цитата applegame @ Создал объект в одном потоке раздал указатель на него еще десятерым, подождал пока они завершаться, уничтожил объект. Вот тебе схема с одним владельцем и совместным доступом. Э-э... Если ты ждешь пока потоки завершатся, то зачем тебе GC, если объект прекрасно и безопасно удалится создателем? Полезность GC проявляется как раз, когда ты не ждешь, пока потоки, обрабатывающие объект, завершатся, поэтому ты не можешь сам удалить объект там, где создал. |
Сообщ.
#540
,
|
|
|
Цитата applegame @ Но владение ресурсом и совместный доступ - понятия ортогональные. Совместный доступ - проблема синхронизации, владение ресурсом - проблема времени жизни ресурса. Так вот именно. Потому наличие GC упрощает для тебя вопросы владения вне зависимости от иммутабельности(которая, в том числе, позволяет тебе не беспокоится о синхронизации). Добавлено Цитата applegame @ Но я попробую сформулировать нечто попроще. Будет эдакий многопоточный бенчмарк, пусть даже не похожий на реальный проект. Такое устроит? Меня бы устроило. Не факт, что как следует похоливарим, но подумать можно. А может и поиграться с реализацией будет интересно. |