На главную Наши проекты:
Журнал   ·   Discuz!ML   ·   Wiki   ·   DRKB   ·   Помощь проекту
ПРАВИЛА FAQ Помощь Участники Календарь Избранное RSS
msm.ru
! Правила раздела *nix / gcc / Eclipse / Qt / wxWidgets / GTK+
  • При создании темы ОБЯЗАТЕЛЬНО указывайте версию тулкита / библиотеки / компилятора.
  • Перед тем как задать вопрос, сформулируйте его правильно, чтобы вас могли понять.
  • Нарушение Правил может повлечь наказание со стороны модераторов.


Полезные ссылки:
user posted image Boost по-русски
user posted image Qt по-русски
Модераторы: archimed7592
Страницы: (3) 1 [2] 3  все  ( Перейти к последнему сообщению )  
> Fork приложения на сетевом диске
    Цитата _lcf_ @
    в винде кэшируется только локальная память, с сетевых источником ничего не кэшируется ибо не гарантируется, что файл не был изменен.
    Проблема решается технологией BranchCache.
    Краткое описание, взял с хабра:
    Цитата
    BranchCache – технология кэширования, встроенная в Windows 7 и Windows Server 2008 R2, и призванная оптимизировать (сократить) сетевой трафик, передаваемый по WAN-каналам связи. Соответственно, основная сфера применения BranchCache – организации с филиалами и удаленными офисами, которые связаны между собой и центральным офисом сравнительно медленными линиями передачи данных.
    BranchCache поддерживает кэширование HTTP- и SMB-трафика. При этом на клиентских компьютерах должна быть установлена Windows 7 (редакции Ultimate или Enterprise, в других редакциях BranchCache не работает), а на серверах – Windows Server 2008 R2. Таким образом, BranchCache работает только в связке Windows 7 + Windows Server 2008 R2.

    Глупо это, хранить вообще все в одном исполнительном файле и потом форкаться. Нафиг?
    По нормальному тогда уж если все с собой тягается, то и форкающийся код стоит вынести в отдельный exe, порождать его форкать на здоровье. А связь с основным exe уж через pipe поддерживать..
    В таком случае форкаться будет только то что нужно, весь хлам будет висеть в оперативной памяти, и вдобавок к этому, если еще и не все форкается функцией, не придется заново воссоздавать объекты (там вам виднее, конечно же).
    Сообщение отредактировано: simsergey -
      Цитата Олег М @
      Что значит разветвляет?

      Fork - это вилка, или разветвление.
      Я вам привел пример
      Цитата Олег М @
      Насколько я понимаю, линукс, в fork() ничего этого не копирует, а просто увеличивает счётчики или типа того. Windows так не умеет.

      Все по сути сложнее. Вы же видели пример - текст программы - один
      но содержит код родителя и код потомка. И когда в коде родителя выполнен форк, с этого момента в системе уже два одновременно работающих процесса.
      Насчет счетчиков каких таких?
      В никсах основной процесс имеет свои таблицы файлов. В них много всего. В том числе и сокеты к примеру - они рассматриваются как псевдофайлы. Потомок делает копию таблицы родителя и работает с ней. В примере все четко показано - как родитель уничтожает указатель на сокет в своей таблице, ему с этим сокетом не надо работать. Тогда как у потомка эта запись о сокете остается. В его копии. Ну это про файлы и прочая. Есть много чего еще что копируется в процесс потомка...
      Почитайте "Управление процессами в UNIX" Р. Стивенса...Классика.
      Сообщение отредактировано: Oleg2004 -
        Цитата Oleg2004 @
        Насчет счетчиков каких таких?
        В никсах основной процесс имеет свои таблицы файлов. В них много всего. В том числе и сокеты к примеру - они рассматриваются как псевдофайлы. Потомок делает копию таблицы родителя и работает с ней. В примере все четко показано - как родитель уничтожает указатель на сокет в своей таблице, ему с этим сокетом не надо работать. Тогда как у потомка эта запись о сокете остается. В его копии. Ну это про файлы и прочая. Есть много чего еще что копируется в процесс потомка...

        Счётчики использования страниц памяти, использования хэндлов.
        Т.е. когда ты создаёшь копию процесса, зачем тебе копировать его код? Он read-only, поэтому достаточно увеличить счётчик соответствующих страниц памяти и пользоваться ими.

        Цитата Oleg2004 @
        Fork - это вилка, или разветвление.
        Я вам привел пример


        Я знаю как переводится слово fork.
        Чтобы дублировать процесс, нужно скопировать его код и память и запустить поток. Чтобы этот процесс продолжил работать с того же места нужно ещё скопировать регистры потока.
          Цитата simsergey @
          Проблема решается технологией BranchCache.

          ни черта она не решается, у нас поддержка вынь 7,8 и 10
          Цитата simsergey @
          Глупо это, хранить вообще все в одном исполнительном файле и потом форкаться. Нафиг?

          я уже все описывал в теме :-?
          Олег М, simsergey, Oleg2004 вы можете и дальше за форк ченить поговорить
          Цитата _lcf_ @
          ну и да в винде createprocess, а не форк, да и... в линуксе тоже.

          подразумевалось, что конкретно у нас форк не используется, просто так все говорят...
            Цитата _lcf_ @
            ни черта она не решается
            То есть, почему?
            Единственное, этот компонент надо поставить, он по умолчанию не установлен, и доступен правда не во всех редакциях.
              simsergey
              Цитата simsergey @
              Таким образом, BranchCache работает только в связке Windows 7 + Windows Server 2008 R2.

              это раз. хотя может сейчас и есть поддержка новых версий винды.
              ну а второе, это значит мы своим клиентам должны сказать - ну вы там админов своих пните, чтобы они тулзу какую-то настроили :whistle:
                Цитата _lcf_ @
                Олег М, simsergey, Oleg2004 вы можете и дальше за форк ченить поговорить

                Да уж нет, увольте. :)
                Основная проблема принципиально ясна, и как решить ее вы уже предложили.
                Одно правда я так и не допонял
                Ваши юзвери пользуют и винду и никсы?
                  Цитата _lcf_ @
                  ну а второе, это значит мы своим клиентам должны сказать - ну вы там админов своих пните, чтобы они тулзу какую-то настроили

                  Не, ну вы можете им, клиентам, сказать, что это у вашей компании политика такая, чтоб всё тормозило, надо потерпеть. Они поймут.
                    Цитата _lcf_ @
                    ну а второе, это значит мы своим клиентам должны сказать - ну вы там админов своих пните, чтобы они тулзу какую-то настроили
                    Это нормальная практика, выставить системные требования для ОС.
                    С другой стороны - это плата за упрямство держать все в одном .exe, другое дело, как я писал выше, стартовать свою систему, вытаскивать все что есть в память, а там уже стартовать другие свои exe, связываться с ними и т.д., если есть такая необходимость форкать процессы в винде, зная что они не форкаются, а создаются заново.
                    Почему потоки не использовать? Приложению требуется работать в распределенных системах с поддержкой миграции процессов (без поддержки миграции по нодам потоков) ?

                    Впрочем, для вашей задачи я предложил решение - BranchCache, exe будет стартовать из кэша на конечной машине, второй раз.
                    Это в общем-то решение "из коробки", остальное - это переделка вашего кода. Это изначально не ровное решение.
                      Цитата Oleg2004 @
                      Ваши юзвери пользуют и винду и никсы?

                      в основном винда. но есть пользователи кластеров - узлы на никсах, терминалы на винде. разработчики все на никсах (почти).
                      Цитата Олег М @
                      Они поймут.

                      решение уже реализовано, тут хоть кто-нибудь читать умеет? :wall:

                      Добавлено
                      Цитата simsergey @
                      Почему потоки не использовать?

                      Цитата _lcf_ @
                      форк так контролируемый, как раз чтобы снизить негативные последствия возможных падений.

                      Цитата simsergey @
                      остальное - это переделка вашего кода.

                      это несравнимо проще, чем пытаться напрячь людей по всему миру ;)
                      Сообщение отредактировано: _lcf_ -
                        Цитата _lcf_ @
                        решение уже реализовано, тут хоть кто-нибудь читать умеет?

                        Звучит примерно как - мы уже привинтили к своему велосипеду квадратные колёса и нам нужно только чтоб он поехал.

                        Здесь единственным решением скорее всего будет сохранять файл на локальном диске. Как это сделать - другой вопрос.
                        Наверняка есть возможность в обоих системах настроить кэширование файла или какой-нибудь оффлайн доступ для расшаренных папок.
                        Ну и в любом случае что-то придётся настраивать на клиентах.
                        Сообщение отредактировано: Олег М -
                          Олег М, ну вы явно не читаете что я пишу.
                          Цитата Олег М @
                          Здесь единственным решением скорее всего будет сохранять файл на локальном диске.

                          так и сделано.
                          Цитата Олег М @
                          Как это сделать - другой вопрос.

                          в никсах положен болт, там прекрасно кешируются сетевые данные.
                          для винды проверяется сетевой ли файл (PathIsNetworkPath), если сетевой и номер ревизии не совпадает(он в имени локальном отображен), то тянется на диск.
                          Цитата Олег М @
                          Ну и в любом случае что-то придётся настраивать на клиентах.

                          ничего не придется. будут папочку темп раз в год чистить. много жалоб будет, будем сами чистить, если файлов больше 5, например.
                            Цитата _lcf_ @
                            его не придется. будут папочку темп раз в год чистить. много жалоб будет, будем сами чистить, если файлов больше 5, например

                            Т.е. проблемы уже нет?
                              Цитата _lcf_ @
                              в основном винда. но есть пользователи кластеров - узлы на никсах, терминалы на винде. разработчики все на никсах (почти).

                              Понятно.
                              Вопросов больше нет... :)
                                в общем да, проблему можно считать решенной. но если найдется способ программно объяснить системе, что неплохо бы кешировать сетевые данные...
                                но я так понимаю, что это уже задача ФС, как у NFS, например.
                                0 пользователей читают эту тему (0 гостей и 0 скрытых пользователей)
                                0 пользователей:
                                Страницы: (3) 1 [2] 3  все


                                Рейтинг@Mail.ru
                                [ Script execution time: 0,0504 ]   [ 16 queries used ]   [ Generated: 2.05.24, 22:47 GMT ]