Chinaunix首页 | 论坛 | 博客
  • 博客访问: 683036
  • 博文数量: 516
  • 博客积分: 4119
  • 博客等级: 上校
  • 技术积分: 4288
  • 用 户 组: 普通用户
  • 注册时间: 2012-10-30 17:29
文章分类

全部博文(516)

文章存档

2014年(4)

2013年(160)

2012年(352)

分类:

2012-11-01 11:21:12

原文地址:线程与进程 作者:graylocus

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