问题标签 [nptl]
For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.
linux - 设置线程/proc/PID/cmdline?
在Linux/NPTL上,线程被创建为某种进程。
我可以看到我的一些进程有一个奇怪的命令行:
您知道如何为流程的每个线程执行此操作吗?这对调试非常有帮助。
/me 现在正在研究 HAL 源
redhat - GNU_LIBC_VERSION 和 GNU_NPTL_VERSION 有什么区别?
注意这两个 RedHat Linux 系统配置设置:
我看到它们对应于一些 TLS 库:
我想链接这些库而不是/usr/lib
等价物。我有几个问题:
- 我在 RedHat 和 Debian 上看到过这个。它是否存在于所有 GNU Linux 发行版中?
- 有什么
GNU_LIBC_VERSION
不同的情况GNU_LIBPTHREAD_VERSION
吗? - 这些变量是否可以安全地用于识别中的共享库
/lib/tls
?我想在 Makefile 中自动执行此操作,而不是硬编码一个神奇的 glibc/pthread 版本号。
linux - NPTL 默认堆栈大小问题
我正在使用 C 编程语言和NPTL 2.6开发一个多线程模块化应用程序。对于每个插件,都会创建一个 POSIX 线程。问题是每个线程都有自己的堆栈区域,因为默认堆栈大小取决于用户的选择,这在某些情况下可能会导致巨大的内存消耗。
为了防止不必要的内存使用,我在创建每个线程之前使用了类似的东西来更改堆栈大小:
编辑 I:添加了 pthread_create() 部分。
这没有像我预期的那样工作,报告的堆栈大小发生了pthread_attr_getstacksize()
变化,但应用程序的总内存使用量(来自 ps/top/pmap 输出)没有改变:
旧:10485760,新:65536 - 最小:16384
当我ulimit -s MY_STACK_SIZE_LIMIT
在开始应用程序之前使用时,我达到了预期的结果。
我的问题是:
1-) 启动应用程序后(当然在创建线程之前)是否有任何可移植的(在 UNIX 变体之间)更改(默认)线程堆栈大小的方法?
2-) 是否可以为每个线程使用相同的堆栈区域?
3-) 是否有可能完全禁用线程堆栈而不会有太多痛苦?
posix - 针对 pthread 函数 pthread_condattr_setclock 链接 NPTL
我已经编写了一些在条件变量上使用定时等待的 pthread 代码,但为了确保相对等待,我使用 pthread_condattr_setclock() 将 condvar 的时钟类型设置为 CLOCK_MONOTONIC。
为了在 RHEL4 上编译和链接 pthread_condattr_setclock(),我必须将 -I/usr/include/nptl 和 -L/usr/lib/nptl 添加到我的 gcc 命令行。我的理解是 2.6 内核(RHEL4 有)默认使用 NPTL pthread 实现,那么为什么我需要明确指定这些路径才能使用这个函数呢?
只是这个函数需要我这样做:如果我忽略它,一切都可以编译和链接,而无需指定额外的路径(尽管代码的行为是不正确的)。
c++ - 是否有 linuxthreads 和 nptl 的具体定义
我有一个程序,它对于 linuxthreads 和 nptl 的工作方式必须不同。
这个库中是否有定义,可以在我的程序中使用来检测,是使用 nptl 还是使用 linuxthreads?
UPDATE1:对于运行时有一个getconf GLIBC_LIBPTHREADS,但是对于编译时呢?
c - NPTL 将最大线程数限制为 65528?
以下代码应该产生 100,000 个线程:
这是在具有 32GB RAM 的 64 位机器上运行的;已安装 Debian 5.0,所有库存。
- ulimit -s 512 减小堆栈大小
- /proc/sys/kernel/pid_max 设置为 1,000,000(默认情况下,它的上限为 32k pid)。
- ulimit -u 1000000 增加最大进程数(根本不认为这很重要)
- /proc/sys/kernel/threads-max 设置为 1,000,000(默认情况下,根本没有设置)
运行它会输出以下内容:
我当然不会用完 ram。我什至可以同时启动更多这些程序,它们都启动了它们的 65k 线程。
(请不要建议我不要尝试启动 100,000+ 线程。这是对应该工作的东西的简单测试。我当前基于 epoll 的服务器始终有大约 200k+ 连接,各种论文表明线程可能是更好的选择。 - 谢谢 :) )
java - Java I/O 与带有 Linux NPTL 的 Java 新 I/O (NIO)
我的网络服务器使用通常的 Java I/O 和每个连接机制的线程。如今,随着用户的增加(长轮询连接),他们开始屈服。但是,连接大多是空闲的。虽然这可以通过添加更多网络服务器来解决,但我一直在尝试对NIO实现进行一些研究。
我对它的印象好坏参半。我已经阅读了有关基准测试,其中使用 Linux 中的新NPTL库的常规 I/O优于 NIO。
配置和使用最新的 NPTL for Linux with Java I/O 的真实体验是什么?有没有提高性能?
在更大范围的问题上:
在我们期望正常执行的标准服务器类机器(具有四核处理器的戴尔)中(使用 Linux NPTL 库?)的最大 I/O 和阻塞线程数(我们在Tomcat线程池中配置)是多少。如果线程池变得非常大,比如超过 1000 个线程,会有什么影响?
任何引用和指针将不胜感激。
pthreads - 判断线程是否阻塞
有谁知道确定线程当前是否阻塞的方法?基本上,我想检查某个线程是否阻塞(在这种情况下是在 AF_UNIX 数据报套接字接收调用上),如果是,则向其发送中断信号。
我正在使用 Boost.Thread 在 Linux 上工作,这意味着我正在使用 pthreads。我的系统有 NPTL。
我认为答案是“不”,但想看看我是否遗漏了什么。
linux - 我需要做一些特别的事情来使用 NPTL(而不是 pthreads)吗?
我需要做一些特别的事情来使用 NPTL 而不是 pthreads 吗?我在内核 2.3.23 ...
我之所以问,是因为我正在查看一些可能与 NPTL 一起使用的代码,但我可以看到它仍然包含 pthread,AFAIK 存在线程级别的信号处理、虚假唤醒等问题。
pthreads - 为 ubuntu x86_64 架构从源代码编译和使用 glibc-2.13
我正在尝试构建 libc/NPTL 的修改版本。我的 ubuntu 版本显示它是 2.13 版本。我想创建一个单独的 libc/nptl/libpthreads,并希望将它用于使用动态加载而不替换现有 glibc/libpthreads 的现有应用程序(如 apache)。我是内核编程和动态加载的新手。您能否提供一个如何使用动态加载功能使用 libc/NPTL 的示例。