进程是系统中程序执行和资源分配的基本单位。每个进程都有自己的数据段,代码段和堆栈段,这就导致了进程在进行切换等操作起到了现场保护作用。但是为了进一步减少处理机的空转时间支持多处理器和减少上下文切换开销,进程演化中出现了另外一个概念,这就是线程,也被人称为轻量级的进程。它是一个进程内的基本调度单位。线程是在共享的内存空间中并发的多道执行路径,它们共享一个进程的资源,比如文件描述符和信号处理等。因此, 大大减少了上下文切换的开销。
线程跟进程一样,都拥有一张控制表,线程将相关的变量值放在线程控制表中。一个进程可以拥有一个或者一个以上的线程,也就是有多个线程控制表和堆栈寄存器。但是它们是共享一个内存空间的,这就导致了每个线程的操作都会影响到其他线程。所以线程的同步是非常重要的。
线程可分为用户级线程和核心级线程。
(1)用户级线程主要是解决上下问切换的问题,它的调度算法和调度过程都是用户自己选择决定的,在运行时并不需要特定的内核支持,操作系统都会提供一个库函数,包括对线程的创建、调度、撤销的等功能。而内核仍然度进程进行管理。如果一个进程中的一个线程调用了阻塞的系统调用,那么该进程和该进程中的的其他线程都会被阻塞,这就无法发挥多处理器的优势。
(2)核心级线程是允许不同进程中的线程按照同一相对优先调度方法进行调度。这样就可以充分发挥多处理器的作用。
现在大多数系统都是采用用户级和核心级相结合的方法,一个用户级线程可以对应一个或者一个以上的核心级线程,这样既可以满足多处理机系统的需要,也可以最大限度的减少了调度开销。
在Linux的发展历程中,在方开始,并不真正意义上的支持线程,到出现一对一的线程模型(一个用户级线程对应一个内核级线程),再到如今的NPTL,有了很大的改进,但是仍然采用的是一对一的线程模型。
UNIX环境高级编程之----多线程技术(1)
原创wx604f04a92c6fd 博主文章分类:unix环境高级编程 ©著作权
©著作权归作者所有:来自51CTO博客作者wx604f04a92c6fd的原创作品,请联系作者获取转载授权,否则将追究法律责任
提问和评论都可以,用心的回复会被更多人看到
评论
发布评论
相关文章
-
Python中多线程、进程与协程编程
本文给出Python中多线程、进程与协程编程各自使用场景及使用基本思路总结。
Python 多线程 事件循环 多进程 协程 -
UNIX环境高级编程之----多线程技术(2)
创建线程实际上就是确定调用该线程函数的入口点,这里通常使用的函数是pthread_create。在线程创建
unix 线程 多线程 unix信号 编程 -
UNIX环境高级编程之----多线程同步学习
线程的最大特点是资源的共享性,但资源共享中的同步问题是多线程编
unix 线程 多线程 同步互斥 信号量 -
UNIX环境高级编程之-----popen函数
头文件: #include 函数说明:FILE * popen ( const char * command , const char * type );
popen函数 linux unix之popen函数 #include bash -
UNIX环境高级编程之-----信号signal
参考书籍:unxi环境高级编程信号函数:typedef void (*sighandler_t)(int);sighandler_t signal(int signum,
signal函数 unix信号 #include 父进程 子进程 -
UNIX环境高级编程之-----setjmp和longjmp
非局部跳转头文件中的说明提供了一种避免通常的函数调用和返回顺序的途径,特别的,它
unix 编程 main函数 #include 字符串 -
UNIX环境高级编程——线程限制#include