Я хотел бы понять модель потока Tomcat для разъемов BIO и NIO. Я ссылаюсь на официальный документ Tomcat 7 для разъемов, который можно найти здесь. Основываясь на этом, я сомневаюсь:
- acceptorThread (s). Это один или не более чем 2 потока (как указано в документе), который отвечает только за принятие входящих соединений. Это можно настроить с помощью acceptorThreadCount, и он предположил, что для многопроцессорной машины может использоваться более двух -
- почему это?
- Означает ли это, что количество одновременных открытых подключений масштабируется с числом процессоров в зависимости от количества дескрипторов открытых файлов, разрешенных в серверной системе?
- maxConnections (s):
- Какова связь между этим параметром и acceptCount и количеством дескрипторов открытых файлов в системе.
- Почему значение по умолчанию для этого гораздо выше для NIO-коннектора (10000), чем для BIO (= maxThreads)?
- acceptCount. Это очередь для запросов, когда все потоки обработки запросов заняты.
- Когда запросы помещаются в эту очередь, также назначен дескриптор файла? Или это только, когда запрос активно обрабатывается, использует ли он файловый дескриптор?
- запросы обработки запросов. Количество потоков в этом пуле настраивается атрибутами maxThreads и minSpareThreads.
- Какова связь между этим пулом потоков и acceptorThreads? Влияет ли нить акцептора в поток в этом пуле?
- Как я понимаю, модель NIO более эффективна с потоками обработки запросов, чем модель BIO. Как он достигает этой эффективности?
- Как я читал в разных источниках, потоки в модели NIO соответствуют парадигме потока за запрос по отношению к парадигме потока для каждой модели BIO. Кроме того, в модели соединителя NIO фактическая обработка запроса делегируется в другой поток, контролируемый приложениями, тогда как поток обработки запросов сервера возвращается в пул потоков, чтобы принимать больше соединений. Итак, подразумевает ли это, что преимущества модели NIO будут очевидны только в том случае, если соединения с сервером имеют характер сохранения HTTP или если приложение использует асинхронную обработку сервлетов 3.0?
- Servlet 3.0:
- При использовании Servlet 3.0, каков должен быть размер пула потоков сервлета приложения (относительно размера пула соединительных нитей) для достижения оптимальной эффективности?
- При использовании модели BIO и вместе, будет ли какая-либо разница в том, как обрабатываются запросы (учитывая, что потоки соединителей все еще будут использовать поток для каждой модели подключения)?
Обратите внимание: все обсуждения в отношении tomcat 7.