В Java при закрытии сокета он ничего больше не делает, но он на самом деле закрывает соединение TCP после периода тайм-аута.
Я должен использовать тысячи сокетов, и я хочу, чтобы они были сразу закрыты после того, как я закрываю их, не после периода тайм-аута, который тратит впустую мое время и мои ресурсы. Что я могу сделать?
#include <iostream>
#include <valarray>
using namespace std;
typedef valarray<valarray<int> > va2d;
int main()
{
int data[][3] = { {1, 2, 3}, {4, 5, 6} };
va2d mat(valarray<int>(3), 2);
for (int i = 0; i < 2; ++i)
{
for (int j = 0; j < 3; ++j)
mat[ i ][ j ] = data[ i ][ j ];
}
for (int i = 0; i < 2; ++i)
for (int j = 0; j < 3; ++j)
cout << mat[ i ][ j ] << endl;
}
Подробнее о valarray
:
векторный
контейнер со специальными функциями члена для разрезания и вытирания. доступ к вектору
может быть быстрее valarray < T >
: Eg: 3 Кроме того, многие члены и функции valarray могут быть успешно создан экземпляр и будет проявлять четко определенное поведение, если и только если Т удовлетворяет дополнительным требования, указанные для каждого такого член или связанная функция.
4 [ Пример: Допустимо создание экземпляра valarray, но оператор > () не будет успешно создан экземпляр для операндов valarray, так как комплекс не имеет заказа операторов. - конечный пример]
Edit # 2: Стандартные гуранты, которые вектор
, как и массивы, всегда используют непрерывную память. Кроме того, имеется:
26,5,2 valarray шаблона класса
1 valarray шаблона класса является одномерный интеллектуальный массив, с элементы, пронумерованные последовательно из ноль. Это представление математическое понятие упорядоченного набора ценностей. Иллюзия высшего размерность может быть получена знакомая идиома вычисляемых индексов, вместе с могущественными возможности подмножества, предоставляемые обобщенные операторы нижнего индекса.
и далее:
-121--3311393-26,5,2,3 доступ к элементу valarray
4 Аналогично, выражение & a [i]! = & b [j] оценивает как true для любых двух массивы a и b и для любого size_t i и size_t j так, что i меньше, чем длина a и j меньше, чем длина b. Это свойство указывает отсутствие наложения и может использоваться преимущество за счет оптимизации компиляторов.
Python позволяет «поймать» неуточненные именованные аргументы в дикт, что довольно удобно
>>> def f(**kw):
... print kw
...
>>> f(size=3, sides=6, name="hexagon")
{'sides': 6, 'name': 'hexagon', 'size': 3}
-121--4746357- Я выяснил, что с помощью socket.setRateAddress (boolean)
можно определить JVM
Если вы работаете Сервер, затем Сервес - это правильное решение. Он будет управлять всем лучше, чем вы делаете это вручную через переработку и множество других оптимизаций, предназначенных для запуска сервера с Java.
Закрытие гнезда отключает объект Java из операционной системы, что означает, что он не занимает никаких ресурсов вне JVM, поэтому на самом деле не должно быть проблемой. Но если минимальный накладных расходов из схемы сбора / доработки мусора Java, слишком велико, тогда Java не является действительным решением (поскольку ваша проблема не специфична для программирования сокетов). Хотя я должен сказать, что эффективный сборщик мусора не намного хуже, чем явная управляющая память (и на самом деле может работать лучше).
'Я хочу, чтобы они закрывались сразу после закрытия, а не тратя впустую мое время и мои ресурсы!' Нет, не хотите. Вы хотите, чтобы TCP / IP работал правильно, и состояние TIME_WAIT является критически важной частью этого. Если вас беспокоит состояние TIME_WAIT, быстрый ответ - это тот, кто получит FIN, а не тот, кто первым отправит его .