Win32多线程程序设计(序)
前言:
程序是乏味的代言人,程序世界是如此的单调,上帝说,让世界变的精彩,从此有了多线程程序设计
从第一台计算机出现开始,顺序程序设计就开始深入人心,将任务划分为一个流程,交给计算机去做,一切都那么理所当然,程序世界就像一个黑白的世界,井然有序却又单调乏味,多线程多任务程序设计理念的提出,让程序世界开始变的五彩缤纷,精彩却也引入了很多可能导致混乱的因素。
多线程程序设计是一个设计技巧而不是一个编程技巧,是和单线程顺序程序设计并列的两个分支,多线程多任务使程序的效率得以高度发挥
1) 改善用户对软件操作的感受
2) 使同一时间的一台服务器上提供对成百上千用户的支持
用户只是知晓其效果,而我们程序员要思考的是如何设计一个程序才能达到这样的效果,多线程是提供给我们得以达到此目的的法宝
多线程,使程序得以将其工作分开,独立运作,不互相影响
1.合作式多任务和抢先式多任务
1) 合作式多任务系统
Windows前三个版本是一个基于合作式多任务的操作系统,合作式多任务需要从两方面进行理解
a) 多任务
多任务是指系统允许同时执行多个程序,这对单任务系统来说是一个大的飞跃
b) 合作式
当同时执行多个任务时,多个任务之间需要分享CPU,合作式是指分享CPU的责任是程序的责任而不是操作系统的责任,这样程序就有权拒绝与其他程序分享CPU,进一步 来说,合作式多任务系统中多个任务之间如何分享CPU是程序员的责任,程序员需要在设计程序之初就要考虑如何分配CPU的控制权,稍有不慎就有可能导致某一个程序得不到执行的机会。
2) 抢先式多任务系统
从Windows NT开始,Windows系统开始是一个基于抢先式多任务的操作系统,我们抢先式多任务系统也从两个方面进行讨论
a) 多任务
同上
b) 抢先式
抢先式的意思是操作系统负责CPU使用权的分配,强迫应用程序把CPU分享给其他人,并在任务切换时承担"切换任务时所需的状态存储和恢复"的责任,程序员不负责CPU的分配,这样程序员就不用绞尽脑汁思考如何在多个任务中分配CPU的控制权了
注:
抢先式多任务 多线程如此的重要,是Windows 4.0开始的标志,以后每次版本的更新,这两个的地位从此不可动摇。
2.为什么多线程在程序设计中是如此的重要
1) 服务器程序需要用多线程设计
毋庸置疑
2) 用户程序设计需要用多线程程序设计
当用户程序连接到一个忙碌的服务器时,用户程序只能悬在那里一动不动直到服务器完成所有操作,程序员无法改善这个局面,因为控制权在服务器那端,但如果用户程序有多个线程,那么当一个线程必须停下来等待与服务器连接时,其他线程还可以继续动作,如UI线程可以持续有反应(一个永远有反应的UI是极其重要的)