Articles of multithreading

为什么ostringstream在multithreading环境下无法正常工作

也许有些奇怪。 当我在我的multithreading环境中使用STL ostringstream类时,我发现每个线程的执行时间随着线程数的增加而线性增加。 我不知道为什么发生这种情况。 我尝试检查ostringstream源代码,但无法find任何同步代码。 在ostringsstream中有没有同步的地方? 我用snprintfreplaceostringsstream,性能大幅提高。 我的操作系统是RHEL5.4 64BIT,我的服务器上有两个至强5620 CPU。 以下是运行结果我分别使用1和8个线程1000000个循环。 左列是threadid,右边是运行时间。 因此,随着线程数量的增加,每个线程的运行时间也随之增加。 [host]$./multi_thread 1 1000000 1115760960:0.240113 [host]$./multi_thread 8 1000000 1105004864:8.17012 1115494720:8.22645 1125984576:8.22931 1136474432:8.41319 1094252864:8.73788 1167944000:8.74504 1157454144:8.74951 1146964288:8.75174 代码列表如下 #include <iostream> #include <sstream> using namespace std; void * func(void * t) { int n = *((int *) t); pthread_t pid = pthread_self(); timeval t1, t2; […]

linux – 在几个核心上运行进程

我对核心,进程和线程的工作原理有一个误解: 进程有多个线程。 所有这些线程共享相同的内存部分 核心有它自己的caching和内存地址空间。 所以,当我在Linux操作系统上运行一个进程(包含多个线程),并检查“top -H”命令时,可以看到线程分布在多个内核上。 那么它如何工作? (同一进程的线程,共享相同的进程地址空间,在不同的核心上运行?)? 我在这里想念什么? 谢谢

哪些操作系统/平台实现等待变形优化?

哪个主要的操作系统/平台实现等待变形? 这个问题出现时,我发现没有明确的最佳做法是否应该通过locking互斥信号发出一个条件variables。 一个典型的build议是在locking的时候发出信号,除非分析显示从解锁(通过移除额外的上下文切换)显着地改善了性能。 IIUC,在信令是额外的两个上下文切换时保持锁的唯一缺点; 优点是错误的风险较低,并且更容易实现实时的可预测性。 所以,如果实施等待变形,那么在信号传输的情况下保持locking的做法是非常好的。

Python,gevent,urllib2.urlopen.read(),下载加速器

我正在尝试为Linux构build一个下载加速器。 我的程序使用gevent,os和urllib2。 我的程序收到一个URL并尝试同时下载文件。 我所有的代码都是有效的。 我唯一的问题是,urllib2.urlopen.read()阻止我同时运行.read()函数。 这是抛出我的例外。 Traceback (most recent call last): File "/usr/lib/pymodules/python2.7/gevent/greenlet.py", line 405, in run result = self._run(*self.args, **self.kwargs) File "gevent_concurrent_downloader.py", line 94, in childTasklet _tempRead = handle.read(divisor) # Read/Download part File "/usr/lib/python2.7/socket.py", line 380, in read data = self._sock.recv(left) File "/usr/lib/python2.7/httplib.py", line 561, in read s = self.fp.read(amt) File "/usr/lib/python2.7/socket.py", line 380, […]

如何在连接期间replacepthread_create

我想维护所有正在运行的线程的列表,并提供关于每个线程的一些附加信息。 在这个答案中提到,可以提供我自己的pthread_create版本,并将其链接到程序。 我想在我的覆盖版本的末尾调用原始的pthread_create也是很重要的。 有人可以详细解释如何做和/或提供一些代码示例?

如何find一个pthread是否有挂起的取消请求

我想find一个线程, pthread_cancel是否被调用。 我不想使用一些表格,并保持这一点。 有没有可用的库函数? 我不想取消线程使用一些取消点function取消线程,如果有任何挂起的取消请求,我只是想知道是否有任何挂起的取消请求。

在pthread程序中,例程的额外执行时间是多less?

我写了四个不同的程序来计算两个文件中的总字数。 这四个版本看起来大致相同。 前三个版本使用两个线程来计数,只是三个语句的顺序不同。 最后一个版本使用一个线程来计数。 我会先列出每个版本的不同部分和通用部分,然后列出每个版本的输出和我的问题。 不同的部分: // version 1 count_words(&file1); pthread_create(&new_thread, NULL, count_words, &file2); pthread_join(new_thread, NULL); // version 2 pthread_create(&new_thread, NULL, count_words, &file2); count_words(&file1); pthread_join(new_thread, NULL); // version 3 pthread_create(&new_thread, NULL, count_words, &file2); pthread_join(new_thread, NULL); count_words(&file1); // version 4 count_words(&file1); count_words(&file2); 通用部分:( 将不同的部分插入到这个通用部分来制作一个完整的版本 ) #include <stdio.h> #include <pthread.h> #include <ctype.h> #include <stdlib.h> #include <time.h> #define […]

我应该在Linux上使用哪个线程库用于multithreadingC程序?

我已经完成了Java中的线程,但我是一个完全noob线程C.我的第一个问题,谷歌search后,是:我使用哪个线程库? 有关系吗? 看来我有thread.h和pthread.h可供select。 操作系统是,而且将会是Linux。 更具体地说,目前它是Ubuntu,将保持这样的状态,或成为RHEL。 但是我猜这个发行版并不重要?

multithreading应用程序的核心转储只显示一个线程

我在c ++中有一个testing应用程序,在其main()启动几个线程,然后永远睡在main() 。 其中一个线程正在做一些导致段错误的事情,并且生成一个coredump(之前设置了ulimit -c unlimited)。 我用gdb打开核心,并看到与thread apply all bt或info threads ,我只有一个线程(在main()开始),这是不可能的,因为至lessmain()线程也应该运行。 问题是如何可能的剩下的线程被遗漏,并可能导致它? 这个寂寞的线程的回溯似乎没问题,没有什么奇怪的东西。 操作系统是Red Hat Enterprise 5.3,gdb-6.8。

Python线程与Linux中的多处理

基于这个问题,我认为创build新进程应该和在Linux中创build新线程 一样快 。 但是,一点testing显示非常不同的结果。 这是我的代码: from multiprocessing import Process, Pool from threading import Thread times = 1000 def inc(a): b = 1 return a + b def processes(): for i in xrange(times): p = Process(target=inc, args=(i, )) p.start() p.join() def threads(): for i in xrange(times): t = Thread(target=inc, args=(i, )) t.start() t.join() testing: >>> timeit […]