Большое количество одновременных соединений в экономии

StackTraceElement[] stackTraceElements = Thread.currentThread().getStackTrace()

Согласно Javadocs:

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

A StackTraceElement имеет getClassName(), getFileName(), getLineNumber() и getMethodName().

Вам придется поэкспериментировать, чтобы определить, какой индекс вы хотите (вероятно, stackTraceElements[1] или [2]).

5
задан kyku 5 June 2009 в 09:06
поделиться

2 ответа

Используя другой подход, если вы используете C ++ для создания своего сервера, вы можете использовать TNonblockingServer вместо TThreadPoolServer, что позволит вам принимать множество подключений одновременно, независимо от того, сколько потоков активно. и т. д.

При этом вы не обязательно сможете работать быстрее (обработчики по-прежнему выполняются в пуле потоков), но больше клиентов смогут подключиться к вам одновременно.

Вот как выглядит код сервера NB:

shared_ptr<TProtocolFactory> protocolFactory(new TBinaryProtocolFactory());
shared_ptr<MyHandler> handler(new MyHandler());
shared_ptr<TProcessor> processor(new MyProcessor(handler));
TNonblockingServer server(processor, protocolFactory, port);
3
ответ дан 14 December 2019 в 19:23
поделиться

Ваше ограничение четырьмя потоками в пуле встроено в конструктор по умолчанию SimpleThreadManager:

class SimpleThreadManager : public ThreadManager::Impl {

 public:
  SimpleThreadManager(size_t workerCount=4, size_t pendingTaskCountMax=0) :
    workerCount_(workerCount),
    pendingTaskCountMax_(pendingTaskCountMax),
    firstTime_(true) {
  }
...
};

Этот объект ThreadManager передается соонструктору ThreadPoolServer, поэтому передайте большее число конструктору этого объекта, чтобы увеличить размер пула потоков. .

2
ответ дан 14 December 2019 в 19:23
поделиться
Другие вопросы по тегам:

Похожие вопросы: