多数系统在内核的实现中对二者不加区分,linux系统下的线程,应当将其理解为轻量级线程。
1.线程的概念
进程是一个执行实体,操作系统以进程为单位分配资源。在一个执行空间内可以使用多个小型进程并发的完成不同的任务,这种小型进程称为线程。
一个进程中的每个线程都有自己的运行环境上下文,包括线程ID,一组寄存器的值,堆栈,信号屏蔽字等。进程的所有资源被各线程共享,包括可执行代码段,全局变量,堆栈空间,文件描述符等。
引入了线程后,操作系统中的执行实体不再是进程,而是线程。进程只是一个用来分配资源的实体,而真正负责执行的是线程。单进程可以看做只有一个线程的进程。
2.线程的优势
提出线程模型的初衷是为了提高并行性,如果在同一个进程空间内同时并发执行多个线程,则程序的执行效率就会大大提高。
(1)由于线程共享进程地址空间内的所有资源,所以进程之间的通信是很方便的。同样的任务如果采用多进程的编程模型,就必须使用操作系统提供的进程间的通信方式。效率和程序设计的复杂度都会受到很大影响。使用多线程可以避免这些问题,多个执行任务的线程协调起来会很方便,提高了效率也降低了编程的难度。
(2)多个线程处理不同的任务,增加了程序的并发性,使程序更高效的执行。
在交互式程序设计上,可以设计一个线程接收用户输入的命令,并创建另一个线程对这些命令进程处理。浏览器就是采用这种方式,一个线程处理用户的输入(键盘输入或鼠标输入),一个线程负责显示请求站点发回的数据,剩下的多个线程分别接收不同的数据包。
3.线程标识符
每个线程都有自己的ID,使用数据类型pthread_t表示,是unsigned long int 类型的。同进程ID的数据类型pid_t一样。linux下使用pthread_self函数得到一个线程的ID
pthread_t pthread_self(void);
pthread_self函数返回调用线程的线程ID
判断两个线程的ID是否相同,使用如下函数
int pthread_equal(pthread_t tid1, pthread_t tid2);
如果相等则返回0,不等返回非零值。
阅读(648) | 评论(0) | 转发(0) |