标签: multithreading

为什么在现代 Linux 上,默认堆栈大小如此之大 - 8MB(在某些发行版上甚至是 10)

例如,在 OSX 上,它甚至小于 512k。

考虑到应用程序不使用递归并且不分配大量堆栈变量,是否有任何推荐的大小?
我知道这个问题太广泛了,它在很大程度上取决于使用情况,但仍然想问,因为我想知道这个庞大的数字背后是否有一些隐藏的/内部/系统原因


我想知道,因为我打算在我的应用程序中将堆栈大小更改为 512 KiB - 这听起来仍然是一个巨大的数字,但它比 8MiB 小得多 - 并且会导致进程的虚拟内存显着减少,因为我有很多线程(I/O)。

我也知道这并没有什么坏处,这里有很好的解释pthreads 的默认堆栈大小

linux osx virtual-memory multithreading stack

13
推荐指数
2
解决办法
8999
查看次数

为什么 top 和 ps 为相同的进程显示不同的 PID?

当我运行时top -H,我看到我的多个mysql线程都具有相同的 PID。但是,在ps -eLf我看来,每个人都有不同的 PID:

ps -eLf

UID        PID  PPID   LWP  C NLWP STIME TTY          TIME CMD
mysql     1424     1  1424  0   17 18:41 ?        00:00:00 /usr/sbin/mysqld
mysql     1424     1  1481  0   17 18:41 ?        00:00:00 /usr/sbin/mysqld
mysql     1424     1  1482  0   17 18:41 ?        00:00:00 /usr/sbin/mysqld
mysql     1424     1  1483  0   17 18:41 ?        00:00:00 /usr/sbin/mysqld
mysql     1424     1  1484  0   17 18:41 ?        00:00:00 /usr/sbin/mysqld
mysql     1424     1  1485  0   17 18:41 …
Run Code Online (Sandbox Code Playgroud)

process-management multithreading pid

12
推荐指数
1
解决办法
1万
查看次数

默认使用多线程make?

有什么方法可以在系统范围内make使用多线程(6 个线程在我的系统上是理想的),而不是仅仅添加-j6到命令行?那么,如果我跑了make,它的作用就和我在跑一样make -j6?我想要这个功能,因为我使用pacaur(我在 Arch 上)从 AUR 安装了很多包,所以我不直接运行 make 命令,但我仍然希望多线程更快地构建包。

command-line compiling make multithreading

10
推荐指数
1
解决办法
8368
查看次数

bash 脚本中的多线程/分叉

我编写了一个 bash 脚本,格式如下:

#!/bin/bash
start=$(date +%s)
inFile="input.txt"
outFile="output.csv"

rm -f $inFile $outFile

while read line
do

    -- Block of Commands

done < "$inFile"

end=$(date +%s)

runtime=$((end-start))

echo "Program has finished execution in $runtime seconds."
Run Code Online (Sandbox Code Playgroud)

while循环将从读取$inFile,上线执行一些活动和转储结果$outFile

由于$inFile有 3500 多行长,脚本完全执行需要 6-7 个小时。为了尽量减少这个时间,我计划在这个脚本中使用多线程或分叉。如果我创建 8 个子进程,$inFile将同时处理 8 行。

如何才能做到这一点?

shell-script multithreading parallelism

9
推荐指数
1
解决办法
2万
查看次数

如何从 bash shell 脚本并行调用服务 URL?

我有一个从另一个应用程序调用的服务。以下是我正在调用的服务 URL -

http://www.betaservice.domain.host.com/web/hasChanged?ver=0
Run Code Online (Sandbox Code Playgroud)

我需要以多线程方式对我上面的服务 URL 进行一些负载测试,而不是一个一个依次调用。

bash shell 脚本有什么办法,我可以通过以多线程方式调用上面的服务 URL 来加载它吗?如果可能的话,我可以让 60-70 个线程非常快地并行调用上面的 URL 吗?

bash download shell-script multithreading

9
推荐指数
3
解决办法
5万
查看次数

vim 是多线程的吗?

我有一个巨大的(我的意思是巨大的)文本文件,我将使用vim. 我可以使用两台不同的(debian)机器来处理它。

一种是双核,一种是八核。我的双核盒子上的单核比我的八核盒子上的单核快。

'vim' 是否以某种方式利用多线程来使我的工作在八核机器上运行得更快?

vim multithreading

9
推荐指数
1
解决办法
3436
查看次数

为什么线程有自己的PID?

我正在使用 htop 并查看启动多个线程来搜索文件中文本的进程(rg),这是以下中的树视图htop

PID   Command
1019  |- rg 'search this'
1021     |- rg 'search this'
1022     |- rg 'search this'
1023     |- rg 'search this'
Run Code Online (Sandbox Code Playgroud)

为什么我会看到进程线程的 PID?我认为线程没有 PID,它们只是共享其父级的 PID。

linux process multithreading

9
推荐指数
1
解决办法
4019
查看次数

struct thread_info 定位struct task_struct 需要什么?

在阅读 Linux 设备驱动程序时,我可以理解进程描述符(类型struct task_struct)包含有关特定任务的所有信息。进程描述符由slab分配器动态分配。

我想知道的是需要引入一个称为thread_info存储在堆栈底部的新结构(假设为 x86)。为什么这样做?

为什么不能将当前正在执行的任务地址 ( struct task_struct)的地址放入内核堆栈?

linux process c kernel multithreading

8
推荐指数
2
解决办法
5612
查看次数

Linux 最大线程数

我的服务器一直在运行 Amazon Ec2 linux。我里面有一个 mongodb 服务器。mongodb 服务器一直在高负载下运行,不幸的是,我遇到了问题:/

众所周知,mongodb 为每个客户端连接创建新线程,这在以前工作得很好。我不知道为什么,但是 MongoDB 作为非特权用户(它在 mongod 用户下运行)不能在主机上创建超过 975 个连接。但是当我以 root 用户身份运行它时,它最多可以处理 20000 个连接(mongodb 内部限制)。但是,进一步的调查表明,问题不是 MongoDB 服务器,而是 linux 本身。

我找到了一个简单的程序,它检查最大连接数:

/* 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
#define PTHREAD_STACK_MIN 1*1024*1024*1024
int i;

void run(void) {
  sleep(60 * 60);
}

int main(int argc, char *argv[]) {
  int rc = 0;
  pthread_t thread[MAX_THREADS];
  pthread_attr_t thread_attr;

  pthread_attr_init(&thread_attr);
  pthread_attr_setstacksize(&thread_attr, …
Run Code Online (Sandbox Code Playgroud)

linux multithreading

8
推荐指数
1
解决办法
3万
查看次数

如何指定在哪个核心上生成 pthread

我正在运行一个集群,其中每个节点都有一个 Intel Xeon E5430。/proc/cpuinfo 报告 8 个内核。我在 Ubuntu 16.04LTS 上使用用 gcc ver 5.3.1 编译的 C/C++。

将我的工作分发到每个节点是很容易的部分。我的问题与在每个节点上运行的进程有关。如何创建 8 个并发线程并保证每个线程都在单独的核心上产生?

15 年前,当我使用 32 个处理器的 SGI 时,fork 命令采用一个整数参数,即物理处理器 ID。在 fork 或 threading 中是否有类似的调用将线程放置在物理核心上?

multithreading

6
推荐指数
1
解决办法
9261
查看次数