问题标签 [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.

0 投票
3 回答
3589 浏览

linux - 设置线程/proc/PID/cmdline?

Linux/NPTL上,线程被创建为某种进程。

我可以看到我的一些进程有一个奇怪的命令行:

您知道如何为流程的每个线程执行此操作吗?这对调试非常有帮助。

/me 现在正在研究 HAL 源

0 投票
1 回答
1285 浏览

redhat - GNU_LIBC_VERSION 和 GNU_NPTL_VERSION 有什么区别?

注意这两个 RedHat Linux 系统配置设置:

我看到它们对应于一些 TLS 库:

我想链接这些库而不是/usr/lib等价物。我有几个问题:

  1. 我在 RedHat 和 Debian 上看到过这个。它是否存在于所有 GNU Linux 发行版中?
  2. 有什么GNU_LIBC_VERSION不同的情况GNU_LIBPTHREAD_VERSION吗?
  3. 这些变量是否可以安全地用于识别中的共享库/lib/tls?我想在 Makefile 中自动执行此操作,而不是硬编码一个神奇的 glibc/pthread 版本号。
0 投票
2 回答
1432 浏览

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-) 是否有可能完全禁用线程堆栈而不会有太多痛苦?

0 投票
1 回答
1308 浏览

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 实现,那么为什么我需要明确指定这些路径才能使用这个函数呢?

只是这个函数需要我这样做:如果我忽略它,一切都可以编译和链接,而无需指定额外的路径(尽管代码的行为是不正确的)。

0 投票
3 回答
1386 浏览

c++ - 是否有 linuxthreads 和 nptl 的具体定义

我有一个程序,它对于 linuxthreads 和 nptl 的工作方式必须不同。

这个库中是否有定义,可以在我的程序中使用来检测,是使用 nptl 还是使用 linuxthreads?

UPDATE1:对于运行时有一个getconf GLIBC_LIBPTHREADS,但是对于编译时呢?

0 投票
4 回答
4793 浏览

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+ 连接,各种论文表明线程可能是更好的选择。 - 谢谢 :) )

0 投票
3 回答
5542 浏览

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 个线程,会有什么影响?

任何引用和指针将不胜感激。

0 投票
2 回答
3045 浏览

pthreads - 判断线程是否阻塞

有谁知道确定线程当前是否阻塞的方法?基本上,我想检查某个线程是否阻塞(在这种情况下是在 AF_UNIX 数据报套接字接收调用上),如果是,则向其发送中断信号。

我正在使用 Boost.Thread 在 Linux 上工作,这意味着我正在使用 pthreads。我的系统有 NPTL。

我认为答案是“不”,但想看看我是否遗漏了什么。

0 投票
2 回答
245 浏览

linux - 我需要做一些特别的事情来使用 NPTL(而不是 pthreads)吗?

我需要做一些特别的事情来使用 NPTL 而不是 pthreads 吗?我在内核 2.3.23 ...

我之所以问,是因为我正在查看一些可能与 NPTL 一起使用的代码,但我可以看到它仍然包含 pthread,AFAIK 存在线程级别的信号处理、虚假唤醒等问题。

0 投票
1 回答
937 浏览

pthreads - 为 ubuntu x86_64 架构从源代码编译和使用 glibc-2.13

我正在尝试构建 libc/NPTL 的修改版本。我的 ubuntu 版本显示它是 2.13 版本。我想创建一个单独的 libc/nptl/libpthreads,并希望将它用于使用动态加载而不替换现有 glibc/libpthreads 的现有应用程序(如 apache)。我是内核编程和动态加载的新手。您能否提供一个如何使用动态加载功能使用 libc/NPTL 的示例。