Pro___m程序员

操作系统 线程简介

2014-05-26  本文已影响393人  金发萌音

线程

什么是线程?为什么要设立线程?线程的优点有哪些

线程是如何实现的?实现线程的相关技术有哪些?

  1. 请阐述进程和线程之间的区别和联系。

  2. 用户级线程和内核级线程有何区别?


多线程模型

什么是多线程模型,它有什么用?

多线程模型有哪些?他们的特点是什么?

多个用户级线程对应一个内核级线程,线程管理是由线程库在用户控件进行 效率很高但某个线程阻塞则会导致进程的阻塞,且多个线程不能并行执行在多CPU环境下

一个用户级线程对应一个内核级线程,线程管理由内核进行,效率相对多对一模型稍低,但是这种模型能提供更好的并行性多个线程可以并行在多个CPU中,且某个线程的阻塞不会造成整个进程的阻塞,windows操作系统采用一对一模型

多对多模型多路复用了很多内核级线程(数量<=用户线程数)与用户级线程对应,在效率和并行性中找到了比较好的平衡


线程库

什么是线程库,他有什么用?

如何实现线程库?

  1. 在用户空间中提供一个没有内核支持的库,其API调用相当于调用本地函数

  2. 由操作系统支持的内核级的库.其API调用相当于系统调用

常用的线程库?

前两种需要重点理解,结合代码来看可能更轻松,我会在复习或者其他时间用codeBlock来遍两个小程序上上手


多线程问题

多线程给我们带来方便的同时同样会给我们带来一定的麻烦,这里会提到几个常见的常见(教科书里提到的)的问题

fork() 和 exec()问题

这两个函数在第三章中提到过,fork()使得进程被复制出一个"分支"来执行,而在线程中

答案是两种都有 UNIX就提供了两种fork()来分别进行两种操作

线程取消问题

在线程执行完其任务前想让其取消当前操作怎么办?这同样有两种方式

  1. 异步取消,一个线程立即取消目标线程,这样的情况可能出现在多线程搜索上:其中某个线程找到了目标,那么他将取消掉其他所有线程

  2. 延时取消:这使得目标线程不断检查他是否该终止

这样也有问题,异步取消的很"突然",如果资源已分配给要被取消的线程或者该线程正在更新其他线程共享的数据,那么系统将很难回收资源.

延时取消因为有了"心里准备"他可以很从容的干完"身后事"吃了断头饭在上路....

信号处理问题

信号时在UNIX中用来通知一个特定的事件发生

信号将被信号处理程序(默认的或用户自定义的)

上文说到信号要发送到进程,如果目标进程黑是个单线程的进程就好说了,直接发给它,但如果目标进程有很多线程怎么办呢?这里也有几个策略

具体使用哪种策略要根据信号的种类来决定

试比较信号机制与中断机制的异同。(摘自百度文库分析信号处理机制与中断的异同)

相同:

  1. 采用了相同的异步通信方式;

  2. 当检测出有信号或中断请求时,都暂停正在执行的程序而转去执行相应的处理程序;

  3. 都在处理完毕后返回到原来的断点;

  4. 对信号或中断都可进行屏蔽。

区别:

  1. 中断有优先级,而信号没有优先级,所有的信号都是平等的;

  2. 信号处理程序是在用户态下运行的,而中断处理程序是在核心态下运行;

  3. 中断响应是及时的,而信号响应通常都有较大的时间延迟

线程池问题

线程特定数据

这个其实很好理解,所有线程共享进程数据,有时候,线程需要一份数据的副本来为自己服务,这样的数据就称为线程特定数据

调度程序激活

解决内核与线程库之间的通信问题

Scheduler activations provide upcalls - a communication mechanism from the kernel to the thread library


了解几种系统线程实例

如linux windows等....

上一篇 下一篇

猜你喜欢

热点阅读