На главную Наши проекты:
Журнал   ·   Discuz!ML   ·   Wiki   ·   DRKB   ·   Помощь проекту
ПРАВИЛА FAQ Помощь Участники Календарь Избранное RSS
msm.ru
! Правила раздела:
1. Название темы - краткое описание кто/что против кого/чего
2. В первом сообщении - список параметров, по которым идет сравнение.
3. Старайтесь аргументировать свои высказывания. Фразы типа "Венда/Слюникс - ацтой" считаются флудом.
4. Давайте жить дружно и не доводить обсуждение до маразма и личных оскорблений.
Модераторы: Модераторы, Комодераторы
Страницы: (56) « Первая ... 32 33 [34] 35 36 ...  55 56  ( Перейти к последнему сообщению )  
> D vs C++ , почти сурковская пропаганда: не пора ли C++ потихоньку готовиться к пенсии?
    Цитата applegame @
    Ну а что есть в C++ для каруселей?
    Твоя фантазия. Ну сам посуди, какая логика владения должна быть, скажем, у двусвязного списка?
      Цитата Qraizer @
      Ну сам посуди, какая логика владения должна быть, скажем, у двусвязного списка?
      GC? Которого нет в C++, хотя вполне может быть. :D
      Сообщение отредактировано: applegame -
        Цитата applegame @
        Цитата Qraizer @
        Ну сам посуди, какая логика владения должна быть, скажем, у двусвязного списка?
        GC? Которого нет в C++, хотя вполне может быть. :D

        У D же C/C++'ый GC :D
          Цитата D_KEY @
          У D же C/C++'ый GC :D
          Именно, и вроде даже был пропосал на GC.
            Цитата applegame @
            Цитата D_KEY @
            Для обмена объектами достаточно unique_ptr и передачи владения.
            К сожалению, зачастую недостаточно. Точнее, зачастую невозможно передать владение.

            А ты мог бы привести какой-нибудь интересный пример? Задачку может какую.
              А почему бы вместо указателя на (большие)данные не передавать указатель на функцию обработки в обратном направлении? Т.е. построить протокол взаимодействия потоков таким образом, чтобы обмен происходил исключительно маленькими порциями сообщений, которые можно тупо копировать и не париться ни над счётчиком ссылок, ни над потокобезопасностью (данные же иимутабельны в нашем обсуждении).

              Да, чревато callback-hell, но ведь можно сделать это нормально.
              Сообщение отредактировано: korvin -
                Цитата D_KEY @
                А ты мог бы привести какой-нибудь интересный пример? Задачку может какую.
                Есть один большой массив иммутабельных данных, нужно обрабатывать его части параллельно множеством потоков. Если я передаю один и тот же элемент в несколько потоков, то тут либо голые указатели, либо shared_ptr.
                Цитата korvin @
                А почему бы вместо указателя на (большие)данные не передавать указатель на функцию обработки в обратном направлении? Т.е. построить протокол взаимодействия потоков таким образом, чтобы обмен происходил исключительно маленькими порциями сообщений, которые можно тупо копировать и не париться ни над счётчиком ссылок, ни над потокобезопасностью (данные же иимутабельны в нашем обсуждении).
                Ну а указатель на иммутабельные данные разве не есть исключительно малая порция сообщений, которые можно тупо копировать и не париться ни над счётчиком ссылок, ни над потокобезопасностью? Кроме того у меня только несколько постоянно работающих потоков. Для обработки порций данных запускаются отдельные потоки. Они обрабатывают свой кусок и завершаются. Так как я использую D + vibe.d, то вместо потоков я применяю сущности очень похожие на goroutines.

                Первая версия была написана на Ruby + Celluloid, но из-за кривой архитектуры надо было все это переписать. От Ruby я отказался из-за динамической типизации.
                Сообщение отредактировано: applegame -
                  Цитата applegame @
                  нужно обрабатывать его части параллельно множеством потоков.
                  Если я передаю один и тот же элемент в несколько потоков

                  А зачем ты передаешь один и тот же элемент в разные потоки?

                  Цитата
                  то тут либо голые указатели, либо shared_ptr.

                  Вообще, в этом примере скорее всего есть тот, кто собирает результат обработчиков и/или ждет их завершения. Вот он и является владельцем. Т.е. сначала владельцем является тот, кто инициирует обработку, а потом он передает владение тому, кто эту обработку ожидает/объединяет результаты и пр.
                    Цитата D_KEY @
                    А зачем ты передаешь один и тот же элемент в разные потоки?
                    Ну а как иначе, если у меня есть скажем сто внешних наблюдателей, которые через RPC-интерфейс желают в любой момент времени прочитать состояние каких-то элементов массива?
                    Цитата D_KEY @
                    Вообще, в этом примере скорее всего есть тот, кто собирает результат обработчиков и/или ждет их завершения. Вот он и является владельцем. Т.е. сначала владельцем является тот, кто инициирует обработку, а потом он передает владение тому, кто эту обработку ожидает/объединяет результаты и пр.
                    Владельцем является по сути массив данных. У никому передать владение он не может. Нет, unique_ptr тут явно не подходит.
                      Цитата applegame @
                      Ну а как иначе, если у меня есть скажем сто внешних наблюдателей, которые через RPC-интерфейс желают в любой момент времени прочитать состояние каких-то элементов массива?

                      Но в таком случае и GC не должен собрать этот массив, ведь в любой момент кто-то может запросить его по RPC.
                        Цитата D_KEY @
                        Но в таком случае и GC не должен собрать этот массив, ведь в любой момент кто-то может запросить его по RPC.
                        Сам массив нет, а вот элементы да (точнее не сами элементы, а объекты на которые эти элементы ссылаются).
                        Массив меняется: какие-то элементы удаляются, новые добавляются. Скажем отдал я несколько элементов в поток обрабатывающий RPC-запрос. Пока запрос обрабатывается эти элементы были удалены из массива. Никаких сбоев не будет. Как только RPC-поток отработает ставшие ненужными элементы будут удалены GC.
                        Сообщение отредактировано: applegame -
                          Цитата applegame @
                          Сам массив нет, а вот элементы да (точнее не сами элементы, а объекты на которые эти элементы ссылаются).

                          А я подумал, что данные прямо в массиве лежат. Ок.

                          Цитата
                          Массив меняется: какие-то элементы удаляются, новые добавляются.

                          Кем?

                          Цитата
                          Скажем отдал я несколько элементов в поток обрабатывающий RPC-запрос. Пока запрос обрабатывается эти элементы были удалены из массива. Никаких сбоев не будет.

                          Ну shared_ptr вполне справится :-? Или ты думаешь, что затраты на копирование shared_ptr будут существенными?
                            Цитата D_KEY @
                            Кем?
                            Потоками-обработчиками. Операции чтения/записи в массив приходится синхронизировать мьютексом. Но они достаточно дешевые, так как копируются не сами объекты а только ссылки на них. И массив на самом деле не массив в смысле непрерывной области памяти. Там набор хэш-таблиц.
                            Цитата D_KEY @
                            Ну shared_ptr вполне справится :-? Или ты думаешь, что затраты на копирование shared_ptr будут существенными?
                            Зависит от нагрузки. Лично я в своем проекте ориентировался не на существенность оверхеда shared_ptr, даже если бы прибавилось скажем 10% я бы не переживал особо. Для меня было гораздо важнее удобство использования и безопасность. Хоть ты и сказал, что удобство - это субъективный параметр, но в данном случае он вполне объективный. Простое при прочих равных объективно удобнее сложного.
                            Сообщение отредактировано: applegame -
                              Цитата applegame @
                              Операции чтения/записи в массив приходится синхронизировать мьютексом.

                              Но при этом ты беспокоишься о копировании shared_ptr :)

                              Цитата
                              Для меня было гораздо важнее удобство использования и безопасность.

                              Безопасность чего?

                              Цитата
                              Простое при прочих равных объективно удобнее сложного.

                              Ты так говоришь, как будто "простое" и "сложное" - это объективные вещи :)
                              Я вот не помню, чтобы shared_ptr мне когда-либо казался сложным. GC сам по себе гораздо сложнее, как и возможные случаи утечек при его использовании.
                                Мне кажется, applegame, ты смешал иммутабельность данных, подлежащих обработке, с иммутабельностью контейнера, их содержащего.
                                0 пользователей читают эту тему (0 гостей и 0 скрытых пользователей)
                                0 пользователей:
                                Страницы: (56) « Первая ... 32 33 [34] 35 36 ...  55 56


                                Рейтинг@Mail.ru
                                [ Script execution time: 0,0815 ]   [ 15 queries used ]   [ Generated: 19.06.25, 02:24 GMT ]