线程可分为用户线程和内核级线程,那么用户级线程和内核级线程有何区别?
内核级线程同样被内核支持,但它也被内核管理.其创建等活动直接由内核所控制,这使得它与用户线程比起来效率更低些,这两者最大的不同在于:系统进程被阻塞后,进程不会阻塞,而会调用其他线程在多cpu环境中,内核级线程可以在多cpu中被调度.而用户线程不可以
多对一模型 多个用户级线程对应一个内核级线程,线程管理是由线程库在用户控件进行 效率很高但某个线程阻塞则会导致进程的阻塞,且多个线程不能并行执行在多CPU环境下
一对一模型 一个用户级线程对应一个内核级线程,线程管理由内核进行,效率相对多对一模型稍低,但是这种模型能提供更好的并行性多个线程可以并行在多个CPU中,且某个线程的阻塞不会造成整个进程的阻塞,windows操作系统采用一对一模型
多对多模型 多对多模型多路复用了很多内核级线程(数量<=用户线程数)与用户级线程对应,在效率和并行性中找到了比较好的平衡
多线程给我们带来方便的同时同样会给我们带来一定的麻烦,这里会提到几个常见的常见(教科书里提到的)的问题
这两个函数在第三章中提到过,fork()使得进程被复制出一个"分支"来执行,而在线程中
在线程执行完其任务前想让其取消当前操作怎么办?这同样有两种方式
这样也有问题,异步取消的很"突然",如果资源已分配给要被取消的线程或者该线程正在更新其他线程共享的数据,那么系统将很难回收资源. 延时取消因为有了"心里准备"他可以很从容的干完"身后事"吃了断头饭在上路....
什么是信号?信号如何产生?信号时在UNIX中用来通知一个特定的事件发生
信号将被信号处理程序(默认的或用户自定义的) 上文说到信号要发送到进程,如果目标进程黑是个单线程的进程就好说了,直接发给它,但如果目标进程有很多线程怎么办呢?这里也有几个策略
试比较信号机制与中断机制的异同。(摘自百度文库分析信号处理机制与中断的异同) 相同:
区别:
这个其实很好理解,所有线程共享进程数据,有时候,线程需要一份数据的副本来为自己服务,这样的数据就称为线程特定数据
解决内核与线程库之间的通信问题 Scheduler activations provide upcalls - a communication mechanism from the kernel to the thread library
了解几种系统线程实例 如linux windows等....
原文:http://www.cnblogs.com/goldenhair/p/3681861.html