powered by simpleCommunicator - 2.0.41     © 2025 Programmizd 02
Форумы / C++ [игнор отключен] [закрыт для гостей] / Си. Освободить память 2-мерного сторкового массива
25 сообщений из 308, страница 6 из 13
Си. Освободить память 2-мерного сторкового массива
    #40130747
Dimitry Sibiryakov
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Уткъчтобы уменьшить время выполнения программы.

За счёт чего должно уменьшиться время выполнения программы?
Posted via ActualForum NNTP Server 1.5
...
Рейтинг: 0 / 0
Си. Освободить память 2-мерного сторкового массива
    #40130748
Уткъ
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Dimitry Sibiryakov

Уткъчтобы уменьшить время выполнения программы.

За счёт чего должно уменьшиться время выполнения программы?

За счет параллельных коннектов (и запросов).
...
Рейтинг: 0 / 0
Си. Освободить память 2-мерного сторкового массива
    #40130755
Dimitry Sibiryakov
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
УткъЗа счет параллельных коннектов (и запросов).

Каким образом коннекты и запросы станут параллельными?
Posted via ActualForum NNTP Server 1.5
...
Рейтинг: 0 / 0
Си. Освободить память 2-мерного сторкового массива
    #40130760
Уткъ
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Dimitry Sibiryakov

УткъЗа счет параллельных коннектов (и запросов).

Каким образом коннекты и запросы станут параллельными?

они будут вызваны параллельно.
...
Рейтинг: 0 / 0
Си. Освободить память 2-мерного сторкового массива
    #40130761
Фотография mayton
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Я так понимаю что эти настройки
- max_parallel *
- * processes

будут ограничивать любой параллелизм сверху.

https://www.postgresql.org/docs/current/how-parallel-query-works.html
...
Рейтинг: 0 / 0
Си. Освободить память 2-мерного сторкового массива
    #40130763
Dimitry Sibiryakov
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Уткъони будут вызваны параллельно.

КАК?

API PostgeSQL синхронное, функция не вернётся пока не выполнит операцию.
Posted via ActualForum NNTP Server 1.5
...
Рейтинг: 0 / 0
Си. Освободить память 2-мерного сторкового массива
    #40130766
Уткъ
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Dimitry Sibiryakov

Уткъони будут вызваны параллельно.

КАК?

API PostgeSQL синхронное, функция не вернётся пока не выполнит операцию.




В том-то и дело что вернет.

Чтобы здесь не забивать лишней информацией топик, выслал вам на почту, указанную в профиле, информацию про параллельные запросы.
...
Рейтинг: 0 / 0
Си. Освободить память 2-мерного сторкового массива
    #40130767
Уткъ
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
mayton
Я так понимаю что эти настройки
- max_parallel *
- * processes

будут ограничивать любой параллелизм сверху.

https://www.postgresql.org/docs/current/how-parallel-query-works.html


Не, это когда уже запрос отправлен и он в несколько потоков выполняется.

А там можно сделать так чтобы запрос отправился и вернул управление к программе, затем просто отслеживаются статусы.


PQsendQuery

Отправляет команду серверу, не ожидая получения результата .
...
Рейтинг: 0 / 0
Си. Освободить память 2-мерного сторкового массива
    #40130769
Уткъ
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
А подскажите, можно сдеать функцию, передай ей переменную и чтобы она эту переменную изменила так, чтобы измененная переменная была доступна в main() ?


У меня пока пулучилось передать в функию в переменную, она там считывается в локальную переменную функции и изменить эту переменную ы функции так. чтобы она и в в main() поменялась - не получается.
...
Рейтинг: 0 / 0
Си. Освободить память 2-мерного сторкового массива
    #40130770
Dimitry Sibiryakov
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Уткъвыслал вам на почту, указанную в профиле

В моём профиле не указана почта.

В любом случае - да, массив (даже обычный, а не ассоциативный) тебе поможет. Это
как раз и есть пачка слепленных вместе переменных.
Posted via ActualForum NNTP Server 1.5
...
Рейтинг: 0 / 0
Си. Освободить память 2-мерного сторкового массива
    #40130771
Фотография mayton
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Чета как-то сложно всё. Вот мне в любой DBMS нужно например ее jdbc-драйвер, пул коннектов (типа Hikari),
и примитивы мультипоточки Future/Callable.
...
Рейтинг: 0 / 0
Си. Освободить память 2-мерного сторкового массива
    #40130773
Dima T
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Уткъ
А подскажите, можно сдеать функцию, передай ей переменную и чтобы она эту переменную изменила так, чтобы измененная переменная была доступна в main() ?


У меня пока пулучилось передать в функию в переменную, она там считывается в локальную переменную функции и изменить эту переменную ы функции так. чтобы она и в в main() поменялась - не получается.

Можно, в параметрах передаешь указатель на переменную https://metanit.com/cpp/c/5.7.php
...
Рейтинг: 0 / 0
Си. Освободить память 2-мерного сторкового массива
    #40130774
White Owl
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Уткъ
mayton
Я так понимаю что эти настройки
- max_parallel *
- * processes

будут ограничивать любой параллелизм сверху.

https://www.postgresql.org/docs/current/how-parallel-query-works.html


Не, это когда уже запрос отправлен и он в несколько потоков выполняется.

А там можно сделать так чтобы запрос отправился и вернул управление к программе, затем просто отслеживаются статусы.


PQsendQuery

Отправляет команду серверу, не ожидая получения результата .
Для параллельных запросов это тебе не поможет. Когда ты отправишь второй запрос таким образом - получишь ошибку "занято".
Чтобы действительно распараллелить запросы надо делать множество независимых коннектов к базе и посылать разные запросы через них. А там делаешь ты синхронные или асинхронные запросы уже не важно.

Асинхронный запрос очень удобен если тебе лень самостоятельно делать многопоточное приложение, а программа кроме ожидания ответа сервера должна делать что-то еще, например мигать надписью "ждем ответа от сервера уже Х секунд". Чтобы юзер не думал что ты завис.
...
Рейтинг: 0 / 0
Си. Освободить память 2-мерного сторкового массива
    #40130775
Уткъ
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Dimitry Sibiryakov

Уткъвыслал вам на почту, указанную в профиле

В моём профиле не указана почта.

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



выслал сюда, наверное это не почта...


Массив, получается надо делать из структуры?


Т.к. там разные типы данных, довольно экзотические...
...
Рейтинг: 0 / 0
Си. Освободить память 2-мерного сторкового массива
    #40130776
Уткъ
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Dima T
Уткъ
А подскажите, можно сдеать функцию, передай ей переменную и чтобы она эту переменную изменила так, чтобы измененная переменная была доступна в main() ?


У меня пока пулучилось передать в функию в переменную, она там считывается в локальную переменную функции и изменить эту переменную ы функции так. чтобы она и в в main() поменялась - не получается.

Можно, в параметрах передаешь указатель на переменную https://metanit.com/cpp/c/5.7.php


Спасибо, читаю )
...
Рейтинг: 0 / 0
Си. Освободить память 2-мерного сторкового массива
    #40130778
Уткъ
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
White Owl
Уткъ
пропущено...


Не, это когда уже запрос отправлен и он в несколько потоков выполняется.

А там можно сделать так чтобы запрос отправился и вернул управление к программе, затем просто отслеживаются статусы.


PQsendQuery

Отправляет команду серверу, не ожидая получения результата .
Для параллельных запросов это тебе не поможет. Когда ты отправишь второй запрос таким образом - получишь ошибку "занято".
Чтобы действительно распараллелить запросы надо делать множество независимых коннектов к базе и посылать разные запросы через них. А там делаешь ты синхронные или асинхронные запросы уже не важно.

Асинхронный запрос очень удобен если тебе лень самостоятельно делать многопоточное приложение, а программа кроме ожидания ответа сервера должна делать что-то еще, например мигать надписью "ждем ответа от сервера уже Х секунд". Чтобы юзер не думал что ты завис.


Так, парралельные запросы это не 100500 запросов к одному серверу.

А 1 запрос к 100500 серверам.
...
Рейтинг: 0 / 0
Си. Освободить память 2-мерного сторкового массива
    #40130781
White Owl
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Уткъ
Dima T
Повторяю, для таких целей используют ассоциативные массивы.
Схематично это выглядит так
Код: plaintext
1.
2.
3.
arr["172.0.0.5"] = "..."; //Присваиваешь

printf("%s\n", arr["172.0.0.5"]); // Используешь


Это в С++ так.

PS Имена переменных условны, во время работы они превращаются в адрес памяти, где хранится содержимое.


Все время забываю проусловность переменных )


Кстати, такая идея пришла:

Можно же стуктуру наверное использовать, точнее массив из структуры.

Там просто типы не только char*, но и специфичиские библиотечные типа буфера и тп.
Да, это делается массивом структур.

Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
struct pair {
    char *key;
    char *value;
};

struct pair *arr = malloc(sizeof(struct pair) * N);
arr[123].key = "172.0.0.5";
arr[123].value = "some other text";



а для нахождения делаешь цикл типа:
Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
struct pair *get_value(char *key) {
  struct pair *found_pair = NULL;
  for( int i=0; i<N; i++) {
     if( strcmp(arr[i].key, key) == 0) {
       found_pair = arr[i];
       break;
     }
  }
  if(found_pair) return found_pair.value;
  return NULL;
}
...
Рейтинг: 0 / 0
Си. Освободить память 2-мерного сторкового массива
    #40130782
Фотография mayton
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Утк. Ты всех запутал. Это называется distributed .
...
Рейтинг: 0 / 0
Си. Освободить память 2-мерного сторкового массива
    #40130783
Фотография mayton
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Кстати задолго до 100500 сетевых коннектов количество портов на 1 ethernet интерфейс
резко закончится ... поэтому тут уж или Ишак сдохнет или Султан.

Я-бы предложил внести в топик более близкое к задаче число.

100? 1000?
...
Рейтинг: 0 / 0
Си. Освободить память 2-мерного сторкового массива
    #40130784
wst
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Можно начать с совсем приземленных вещей и спросить про готовность версии для 1 соединения.
...
Рейтинг: 0 / 0
Си. Освободить память 2-мерного сторкового массива
    #40130787
White Owl
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Уткъ
White Owl
пропущено...
Для параллельных запросов это тебе не поможет. Когда ты отправишь второй запрос таким образом - получишь ошибку "занято".
Чтобы действительно распараллелить запросы надо делать множество независимых коннектов к базе и посылать разные запросы через них. А там делаешь ты синхронные или асинхронные запросы уже не важно.

Асинхронный запрос очень удобен если тебе лень самостоятельно делать многопоточное приложение, а программа кроме ожидания ответа сервера должна делать что-то еще, например мигать надписью "ждем ответа от сервера уже Х секунд". Чтобы юзер не думал что ты завис.


Так, парралельные запросы это не 100500 запросов к одному серверу.

А 1 запрос к 100500 серверам.
Если у тебя много серверов - то ты делаешь много коннектов. А к одному серверу или многим - без разницы.

Кстати, из личного опыта - это не обязательно ускоряет работу.
У меня была задача: из центрального офиса узнать состояние дел в филиалах. Из центрального офиса подключались к БД филиала, отправляли несколько запросов на итоговые суммы и отключались. Если база в филиалах работала как полагается, то весь цикл подключение-запрос-отключение укладывался в пару секунд. И последовательный опрос всех филиалов занимал около двух-трех минут. Проблемы были если филиал выключил свою БД или сеть до филиала упала - тогда подключение могло занять до полуминуты прежде чем выдать ошибку.
Сделали параллельные запросы ко всем филиалам разом - серьезно улучшили время работы если есть проблемы в сети, но примерно в три раза ухудшили работу если с филиалами нет проблем. Затык был в клиентской библиотеке подключения, она не могла держать более десятка подключений разом. Внутри самой библиотеки был "тайный" пул (в смысле не описанный в документации), и если в данный момент уже есть десять параллельных коннектов (не важно рабочих или нет) одиннадцатый будет висеть внутри connect() функции.
Впрочем, это было в 2005-ом и на другой БД. Что будет с Постгресом в 2022-ом - надо пробовать.
...
Рейтинг: 0 / 0
Си. Освободить память 2-мерного сторкового массива
    #40130798
Уткъ
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
White Owl
Уткъ
пропущено...


Так, парралельные запросы это не 100500 запросов к одному серверу.

А 1 запрос к 100500 серверам.
Если у тебя много серверов - то ты делаешь много коннектов. А к одному серверу или многим - без разницы.

Кстати, из личного опыта - это не обязательно ускоряет работу.
У меня была задача: из центрального офиса узнать состояние дел в филиалах. Из центрального офиса подключались к БД филиала, отправляли несколько запросов на итоговые суммы и отключались. Если база в филиалах работала как полагается, то весь цикл подключение-запрос-отключение укладывался в пару секунд. И последовательный опрос всех филиалов занимал около двух-трех минут. Проблемы были если филиал выключил свою БД или сеть до филиала упала - тогда подключение могло занять до полуминуты прежде чем выдать ошибку.
Сделали параллельные запросы ко всем филиалам разом - серьезно улучшили время работы если есть проблемы в сети, но примерно в три раза ухудшили работу если с филиалами нет проблем. Затык был в клиентской библиотеке подключения, она не могла держать более десятка подключений разом. Внутри самой библиотеки был "тайный" пул (в смысле не описанный в документации), и если в данный момент уже есть десять параллельных коннектов (не важно рабочих или нет) одиннадцатый будет висеть внутри connect() функции.
Впрочем, это было в 2005-ом и на другой БД. Что будет с Постгресом в 2022-ом - надо пробовать.


Ага, интересный случай.

Я этот способ использую давно, сейчас просто на Си решил переложить, так что сам метод опробованный.

парралельность я конечно ограницу искусттвенно, на всяйкий случай.
...
Рейтинг: 0 / 0
Си. Освободить память 2-мерного сторкового массива
    #40130799
Уткъ
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
mayton
Утк. Ты всех запутал. Это называется distributed .


Да, наверное, я не знал как это называется просто.
...
Рейтинг: 0 / 0
Си. Освободить память 2-мерного сторкового массива
    #40130800
Уткъ
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
mayton
Кстати задолго до 100500 сетевых коннектов количество портов на 1 ethernet интерфейс
резко закончится ... поэтому тут уж или Ишак сдохнет или Султан.

Я-бы предложил внести в топик более близкое к задаче число.

100? 1000?


ну в райное 100-1000 в итоге думаю и будет.
...
Рейтинг: 0 / 0
Си. Освободить память 2-мерного сторкового массива
    #40130801
Уткъ
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
White Owl
Уткъ
пропущено...


Все время забываю проусловность переменных )


Кстати, такая идея пришла:

Можно же стуктуру наверное использовать, точнее массив из структуры.

Там просто типы не только char*, но и специфичиские библиотечные типа буфера и тп.
Да, это делается массивом структур.

Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
struct pair {
    char *key;
    char *value;
};

struct pair *arr = malloc(sizeof(struct pair) * N);
arr[123].key = "172.0.0.5";
arr[123].value = "some other text";



а для нахождения делаешь цикл типа:
Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
struct pair *get_value(char *key) {
  struct pair *found_pair = NULL;
  for( int i=0; i<N; i++) {
     if( strcmp(arr[i].key, key) == 0) {
       found_pair = arr[i];
       break;
     }
  }
  if(found_pair) return found_pair.value;
  return NULL;
}




..сейчас попробую сделать...

Спасибо )
...
Рейтинг: 0 / 0
25 сообщений из 308, страница 6 из 13
Форумы / C++ [игнор отключен] [закрыт для гостей] / Си. Освободить память 2-мерного сторкового массива
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


Просмотр
0 / 0
Close
Debug Console [Select Text]