一、 前言 在 linux 2.6.x 内核中,调度性能的改进是其中最引人注目的一部分[1]。NPTL(Native Posix Thread Library)[2]使用内核的新特性重写了 linux 的线程库,取代历史悠久而备受争议的 linuxThreads[3] 成为 glibc 的首选线程库。 NPTL 的性能究竟如何?相对 linuxThreads 又有哪些明显的改进?在对NPTL进行全面分析之前,本文针对这两种线程库,以及内核中"内核可抢占"(Preemptible)和超线程(HyperThreadin...
by yuchuan2008 - Linux文档专区 - 2008-12-18 13:00:51 阅读(1063) 回复(0)
NPTL 成为 glibc "正选"线程库后,它的性能如何受到很多人的关注。本文就针对NPTL 与 linuxThreads 的性能比较,以及超线程、内核可抢占等特性对线程性能的影响进行了全面评测。 一、 前言 在 linux 2.6.x 内核中,调度性能的改进是其中最引人注目的一部分[1]。NPTL(Native Posix Thread Library)[2]使用内核的新特性重写了 linux 的线程库,取代历史悠久而备受争议的 linuxThreads[3] 成为 glibc 的首选线程库。 NPTL 的性能究...
使用pthread时,在linux平台使用的是libpthread.a,但在OpenBSD下没有该库文件,在OpenBSD下则使用libc_r.a库,目前不太明白libpthread.a和libc_r.a是不是都是Posix标准的线程库,二者是否一样?
现在有一个写好的线程库,用户态的静态库 先用GCC编译,再用AR生成.a文件 在这个线程库上跑程序,一旦涉及到READ(),WRITE()等系统调用的时候会产生错误,不一定每次都出错 分析问题主要是由于进行输入输出系统调用的时候会转入核心态,然后无法正确恢复现场所致 现想到一个解决方案是自己写一个头文件,让线程库调用这个头文件,而不是系统本身的头文件.让程序在分配的时间片内运行不中断... 不知道还有没有其它的方法能够解决类似的...
现在有一个写好的线程库,用户态的静态库 先用GCC编译,再用AR生成.a文件 在这个线程库上跑程序,一旦涉及到READ(),WRITE()等系统调用的时候会产生错误,不一定每次都出错 分析问题主要是由于进行输入输出系统调用的时候会转入核心态,然后无法正确恢复现场所致 现想到一个解决方案是自己写一个头文件,让线程库调用这个头文件,而不是系统本身的头文件.让程序在分配的时间片内运行不中断... 不知道还有没有其它的方法能够解决类似的...
说明一下,这个问题困扰我好长时间,因为正如使用C编程会希望了解进程的内存映象一样,使用POSIX线程库我们也会想去了解其实现的原理。目前只是查过一些资料,或许仍然有误解的地方,请大家继续指正 :) 首先我们需要了解线程(threads)是个什么概念。在传统UNIX中,进程(process,就是Intel所谓的task)是调度的最小单位,复杂的大型软件往往需要有多个进程,fork+exev是很常用的技巧。但是随着需求的扩大,特别是网络服务的...
这个问题我糊涂好久了,看了很多资料,互相矛盾。CU的帖子也看了很多,总感觉矛盾。前天买了本《POSIX多线程程序设计》,讲到pthreads的优势,提到说在SMP机器上进程内的threads可以并行运行。然而linux内核邮件列表上说,linux没有采用1对1的支持,线程是由库实现的而不是OS。这样就是2个观点: 1. pthreads可以在SMP机器上并行; 2. linux上的posix线程库(glibc6已经集成进去了)与内核无关。 我的疑问...
最近开始接触多线程,用到pthread系列函数,有个疑问,进程、线程这一类东西应该是内核提供的基本功能,为什么线程库放在glibc中来实现呢?求解,谢谢 另外好奇问一下,还有没有哪些模块本来是应该有内核提供的,但是目前是放在glib库中实现的?
发布一个我自己业余时间编写的 C++ 多线程库 for linux,这个库只有不到 1000 行源代码,封装了 pthreads 的常用功能(互斥器、条件变量、线程),实现了简单的线程池,并仿照 java concurrent 包编写了 BlockingQueue 和 CountDownLatch。库里的每个 class 都提供了使用样例。 这个库的内容: * 整数的原子操作, AtomicInt32 和 AtomicInt64 * 线程,Thread * 线程池,ThreadPool * 互斥器与条件变量, MutexLock,MutexLock...
在Redhat9.0下面, 创建一个进程。getpid();得到进程ID,然后在进程里用pthreadcreate几个线程,在线程里调用getpid, pthreadgetselfid()的到进程ID和线程ID, 发现该线程的进程ID和它所属的进程ID是一样的, 线程ID却不同。当是在小机里用gcc里的线程库,得到的结果是线程ID和进程ID是不同的,即线程也当作进程来对待,而且多了几个其它线程在运行,若线程当作进程来对待效率是比较低的。在网上查了下linux的线程库,发现新内核...