我的Web服务器使用通常的Java I/O和每个连接机制.如今,他们越来越user with用户(长轮询连接).但是,连接大多是空闲的.虽然这可以通过添加更多的Web服务器来解决,但我一直在尝试对NIO实现进行一些研究.
我对它有一个复杂的印象.我已经读过基准测试,其中Linux中新的NPTL库的常规I/O 优于NIO.
使用Java I/O配置和使用最新的NPTL for Linux有什么真实的体验?有没有提高性能?
在更大范围的问题上:
在标准服务器类机器(带有四核处理器的戴尔)中我们希望正常执行的最大I/O和阻塞线程数(我们在Tomcat线程池中配置)是多少(使用Linux NPTL库?).如果线程池变得非常大,比如超过1000个线程会有什么影响?
任何参考和指针将非常感谢.
以下代码应该生成100,000个线程:
/* compile with: gcc -lpthread -o thread-limit thread-limit.c */
/* originally from: http://www.volano.com/linuxnotes.html */
#include <stdlib.h>
#include <stdio.h>
#include <unistd.h>
#include <pthread.h>
#include <string.h>
#define MAX_THREADS 100000
int i;
void run(void) {
sleep(60 * 60);
}
int main(int argc, char *argv[]) {
int rc = 0;
pthread_t thread[MAX_THREADS];
printf("Creating threads ...\n");
for (i = 0; i < MAX_THREADS && rc == 0; i++) {
rc = pthread_create(&(thread[i]), NULL, (void *) &run, NULL);
if (rc == 0) {
pthread_detach(thread[i]);
if …
Run Code Online (Sandbox Code Playgroud) 惠普手册页(链接)说
"默认情况下,新线程的调度策略和优先级是从创建线程继承的 - 也就是说,默认情况下,pthread_create(3)例程忽略在指定线程属性对象中设置的调度策略和优先级.因此,要创建在调用pthread_create(3)之前,一个受调度策略和优先级设置在指定线程属性对象中的线程,程序必须使用pthread_attr_setinheritsched(3)例程将继承线程
属性对象的调度属性设置为PTHREAD_EXPLICIT_SCHED."
这适用于Linux posix线程(NPTL pthread)吗?
如果没有,影响使用pthread_create()创建的线程的优先级和调度策略的因素是什么?
在Linux/NPTL上,线程被创建为某种进程.
我可以看到我的一些进程有一个奇怪的cmdline:
cat /proc/5590/cmdline
hald-addon-storage: polling /dev/scd0 (every 2 sec)
Run Code Online (Sandbox Code Playgroud)
你知道如何为我的进程的每个线程做到这一点吗?这对调试非常有帮助.
/我现在正在调查HAL来源
谢谢
我必须实现内核级线程,但是在网上搜索时,我发现在 linux 中可以通过三种方法创建内核级线程:
在某处写到 linuxThreads 现在被放弃了。但是我找不到当前对 NPTL 和 kthread 的支持。此外,我找不到任何可以简单解释我如何使用其功能的来源。
哪个是当前支持和使用内核级线程的好库?
还请分享安装这些库并使用它们的任何资源?