Articles of multithreading

Matlab 2011a使用64位Linux上的所有内核?

嗨,我在网上看了,但我似乎无法find答案是否需要做任何事情,使matlab使用所有内核? 据我所知,自2007年以来,multithreading已得到支持。在我的机器上,matlab仅使用一个@ 100%的内核,其余的占用2%。 我正在使用64位Linux(Mint 12)。 在我的另一台只有2个核心,32位的计算机似乎正在利用两个核@ 100%。 不是所有的时间,但在足够的情况下。 在64位,4核心电脑这从来没有发生。 我必须在64位做任何事情,让Matlab尽可能使用所有的核心? 在安装之后,我不得不做一些自定义链接,因为Matlab没有find库(例如libc.so.6),因为它没有在正确的位置查找。

如何在Linux中为用户级线程实施抢先式调度?

在用户级线程中,有N个用户级线程在单个内核线程之上运行。 这与只有一个用户线程在内核线程上运行的pthread相反。 在单个内核线程上抢先调度N个用户级线程。 但是,这是怎么做的细节。 我听到一些build议线程库设置的东西,以便内核发送一个信号,这是一个机制,将执行从一个单独的用户级线程放到一个信号处理程序,然后可以执行抢先调度。 但是,如何保存和/或变异这些状态(如寄存器和线程结构)以使这一切工作的详细信息是什么? 有没有可能是一个非常简单的用户级线程,有助于了解细节?

Linux调度程序如何在多核处理器上调度进程?

多核处理器利用线程级并行性,这意味着多个线程并行运行。 假设一个进程只有一个线程,那么在执行这个进程的时候,其他内核是否保持空闲? 在linux系统中,调度程序把进程和线程都视为一个任务。 它在调度过程中并不区分进程和线程。 那么,这是否意味着不同的内核并行执行不同进程的不同线程? 当上下文切换发生时,这是否只发生在一个核心或cpu的所有核心?

在多个线程/进程之间共享stdout

我有一个Linux程序(语言无关紧要),它打印它login到标准输出。 日志IS需要监视进程。 现在我将通过fork或使用线程来并行化它。 问题:由此产生的标准输出将包含不可读的组合不相关的行… 最后问题:你将如何重构并行进程的输出逻辑?

是否有可能在OS X中设置pthread CPU亲和力?

在Linux中有一个在sched.h中定义的sched_setaffinity()函数,但是我似乎无法在Mac OS X 10.6 pthreads实现中find类似的东西…如果无法设置关联,那么默认策略是什么在OS X中 ?

multithreading服务器问题

我正在写一个服务器在Linux应该服务的API。 最初,我想在单个端口上进行multithreading,这意味着我将有多个线程处理单个端口上接收到的各种请求。 我的一个朋友告诉我,这不是它应该工作的方式。 他告诉我,当收到请求时,首先必须遵循一个Handshake过程,创build一个线程,监听其他某个专用于该请求的端口,然后将请求的客户端redirect到新的端口。 理论上,这很有趣,但我找不到任何有关如何实现握手和redirect的信息。 有人可以帮忙吗? 如果我在解释你的响应时没有错,一旦我创build了一个主线程侦听端口的multithreading服务器,并创build一个新的线程来处理请求,我基本上使它在单个端口上multithreading? 考虑一下我每秒都会收到大量请求的场景。 港口上的每一个请求现在都应该等待“当前”请求完成吗? 如果不是,那么通信如何完成:假设一个浏览器发送一个请求,所以处理这个请求的线程必须先监听端口,阻塞,处理,响应,然后解除阻塞。 通过这个,虽然我有“multithreading”,但我使用的是除主线程以外的一个线程,因为端口被阻塞。

我如何暂停另一个线程(不是当前的线程)?

我正试图实现一个微控制器的模拟。 这种模拟并不是要做一个特定微控制器的时钟周期精确表示,而是检查代码的一般正确性。 我想有一个执行正常代码的“主线程”和执行ISR代码的第二个线程。 无论何时需要运行ISR,ISR线程都会挂起“主线程”。 当然,我想有一个function来阻止中断。 我想通过一个互斥体来解决这个问题,即只要ISR线程执行ISR代码,只要“中断被阻塞”,主线程就持有它。 一个POR(上电复位)可以通过不仅暂停而且杀死主线程(并启动一个执行PORfunction的新线程)来实现。 Windows API提供了必要的function。 但是,使用posix线程(在linux上)似乎不可能做到这一点。 我不想改变实际的硬件独立的微控制器代码。 所以插入任何东西来检查挂起的中断不是一个选项。 接收不良行为点的中断是可取的,因为这也发生在微控制器上(除非你阻止中断)。 有没有办法暂停在Linux上的另一个线程? (我想,debugging器必须以某种方式使用该选项。) 请不要告诉我这是个坏主意。 我知道在大多数情况下都是如此。 但主代码不使用标准库或锁/互斥/信号量。

性能 – multithreading或多进程应用程序

为了在Linux上开发一个高度networking密集的服务器应用程序,什么样的架构是首选? 这个想法是,这个应用程序通常运行在具有多个内核(虚拟或物理)的机器上。 考虑到性能是关键标准,最好去multithreading应用程序还是使用多进程devise的应用程序? 我知道,资源共享和同步从多个进程访问这些资源是很多编程开销,但如前所述,总体性能是关键要求,所以我们可以忽略这些东西。 编程语言是C / C ++。 我听说即使是multithreading应用程序(单进程)也可以利用多个内核,并且独立地在不同的内核上运行每个线程(只要没有同步问题)。 这个调度是由内核完成的。 如果是这样,multithreading应用程序和多进程应用程序在性能上没有太大的区别? Nginx使用多进程架构,并且非常快,但是multithreading应用程序可以获得相同的性能吗? 谢谢。

在Linux上编写multithreadingTCP服务器

在工作中,我负责将TCP服务器作为Modbus从站设备的一部分来实现。 我在堆栈交换和一般的互联网(包括优秀的http://beej.us/guide/bgnet/ )上都做了大量的阅读,但是我正在为devise问题而苦苦挣扎。 总之,我的设备只能接受2个连接,每个连接都会接收到我在主控制器环路中必须处理的modbus请求,然后回复成功或失败状态。 我有如何实现这一点的以下想法。 有一个侦听器线程创build,绑定,侦听和接受连接,然后生成一个新的pthread来监听传入数据的连接,并在空闲超时期限后closures连接。 如果当前活动线程的数量是2,则立即closures新的连接以确保只允许2个连接。 不要从侦听器线程产生新线程,而是使用select()来检测传入的连接请求,以及在活动连接上传入的modbus连接(类似于Beejs指南中的方法)。 创build两个监听器线程,每个监听器线程创build一个可以阻塞accept()调用的套接字(相同的IP和端口号),然后closures套接字fd并处理连接。 在这里,我(可能天真地)认为这将只允许最多2个连接,我可以使用阻塞读取处理。 我一直在使用C ++很长一段时间,但对于Linux开发来说,我还是比较新的。 对于上述哪种方法最好(如果有的话),以及如果我对Linux的经验不足意味着其中任何一个都是非常糟糕的想法,我都非常欢迎。 我渴望避免fork()并坚持pthreads,因为传入的modbus请求将被排队并定期从主控制器循环读取。 预先感谢您的任何build议。

为什么Linux的调度程序将两个线程放在具有超线程的处理器的相同物理内核上?

我读过多处,Linux的默认调度程序在多核机器上是超线程感知的 ,这意味着如果你有一台拥有2个真实核心(4 HT)的机器,它不会将两个繁忙的线程调度到逻辑核心上他们都运行在相同的物理内核上(这在很多情况下会导致性能成本的2倍)。 但是当我在英特尔i5-2520M上运行stress -c 2 (产生两个线程在100%的CPU上运行)时, 它经常 将两个线程 调度 (并保持) 到HT核心1和2上,这两个线程映射到相同的物理核心 。 即使系统空闲,否则。 这也发生在真正的程序(我在这里使用stress ,因为它使得它很容易重现),当这种情况发生时,我的程序可以理解需要两倍的时间运行。 使用taskset手动设置亲和力可以修复我的程序,但是我希望HT认知调度程序能够自己正确地做到这一点。 您可以使用egrep "processor|physical id|core id" /proc/cpuinfo | sed 's/^processor/\nprocessor/g'findHT->物理核心configurationegrep "processor|physical id|core id" /proc/cpuinfo | sed 's/^processor/\nprocessor/g' egrep "processor|physical id|core id" /proc/cpuinfo | sed 's/^processor/\nprocessor/g' 。 所以我的问题是:为什么调度程序把我的线程放在同一个物理内核上呢? 笔记: 这个问题与这个问题非常相似,答案就是说Linux有一个非常复杂的HT调度线程调度器 。 如上所述,我无法观察到这个事实(检查自己的stress -c ),并想知道为什么。 我知道我可以为我的程序手动设置处理器关联,例如使用taskset工具或sched_setaffinity函数。 这不是我正在寻找的,我希望调度程序自己知道把两个繁忙的线程映射到一个物理核心并将一个物理核心完全清空并不是一个好主意。 我知道在某些情况下 ,你更喜欢把线程安排在同一个物理核心上,而把另一个核心放在空闲的位置,但是调度程序大概只有1/4的情况似乎是无意义的。 在我看来,它select的HT内核是完全随机的,或者是在调度时活动最less的HT内核,但是这并不是非常了解超线程的,因为考虑到stress特性的程序有多好从单独的物理内核运行。