Chinaunix首页 | 论坛 | 博客
  • 博客访问: 322108
  • 博文数量: 85
  • 博客积分: 0
  • 博客等级: 民兵
  • 技术积分: 800
  • 用 户 组: 普通用户
  • 注册时间: 2014-10-18 15:21
文章分类

全部博文(85)

文章存档

2017年(1)

2016年(19)

2015年(55)

2014年(10)

我的朋友

分类: LINUX

2015-03-22 17:00:08

在学习多线程之前,先搞清楚一下几个概念

1,什么是进程,什么是线程,什么是同步?

每个正在系统上运行的程序都是一个进程,每个进程包含一到多个线程。进程也可能是整个程序或者是部分程序的动态执行。线程是一组指令的集合,或者是程序的特殊段,它可以在程序里独立执行。也可以把它理解为代码运行的上下文。所以线程基本上是轻量级的进程,它负责在单个程序里执行多任务。
相对进程而言,线程是一个更加接近于执行体的概念,它可以与同进程中的其他线程共享数据,但拥有自己的栈空间,拥有独立的执行序列。在串行程序基础上引入线程和进程是为了提高程序的并发度,从而提高程序运行效率和响应时间。 
同步
指两个或两个以上随时间变化的量在变化过程中保持一定的相对关系。

2,线程同步

使用同步功能,可以控制程序流并访问共享数据,从而并发执行多个线程。共有四种同步模型:互斥锁、读写锁、条件变量和信号。

  • 互斥锁:仅允许每次使用一个线程来执行特定的部分代码或访问特定数据。
  • 读写锁:允许对受保护的共享资源进行并发读和独占写入,要修改资源,线程必须首先获取互斥写锁,只有释放所有的读锁之后,才允许使用互斥写锁。
  • 条件变量:会一直阻塞线程,直到特定条件为真。
  • 计数信号量:通常用来协调对资源的访问。使用计数,可以限制访问某个信号的线程数量,达到指定的技术时,信号将阻塞。

3,为什么要使用多线程?

  • 在多处理器系统中开发程序的并行性。在多处理器系统中,线程模式可以让一个进程同时执行多个独立运算。一个运行在双CPU上的计算密集型多线程程序几乎可以获得传统单线程程序2倍的性能。
  • 在等待慢速外设I/O操作结束的同时,程序可以执行其他计算,为程序的并发提供更有效、更自然的开发方式。比如:对对于网络服务器和客户端,当一个线程等待费时的网络读写操作时,该线程被阻塞,而程序中的其他线程还可以独立的运行。
  • 改进程序结构,许多应用程序以更有效的方式构造为多个独立或半独立的执行单元,而非整块的单个线程。多线程比单线程更能适应用户需求的变话。
  • 占用较少的系统资源,相比于多进程,多线程占用更少的资源。

4,线程的代价

  • 计算负荷,线程代码中的负荷包括由于线程间同步所导致的直接影响,比如时间代价,在几乎所有的多线程代码中你都需要使用某种同步机制。
  • 编程规则,尽管线程编程模型的基本思想简单,但是编写实际的代码不是件容易的事,你需要明白同步协议和程序中的不变量,你不得不避免死锁、竞争和优先级倒置。
  • 更难以调试

5,POSIX线程概念

简要介绍Pthread数据类型


类型 描述
pthread_t 线程标志符
pthread_mutex_t 互斥量
pthread_cond_t 条件变量
pthread_key_t 线程私有权握访问键
pthread_attr_t 线程属性对象
pthread_mutexattr_t 互斥量属性对象
pthread_condattr_t 条件变量属性对象
pthread_once_t “一次性初始化”控制变量
阅读(1239) | 评论(0) | 转发(1) |
给主人留下些什么吧!~~