使用线程,你可以产生高效率的服务器。建立Internet服务器扩充软件,获得多CPU系统的好处,建立精巧的COM/OLE对象,并改善程序的反应度。\r\n 写出这样的软件,需要更多的理论基础,以及一本参考手册;需要广泛了解每一件事情如何彼此相称;需要一份指南,告诉你什么可以正常动作,什么不能!\r\n 通过Win32 API,Windows NT以及Windows 95都可以支持多线程程序设计,但是这个重要主题的信息却极稀有而不够详尽。\r\n 在《Win32多线程程序设计》这本书中,Jim Beveridge和Robert Wiener告诉你什么时机、什么地点、什么方法可以使用多线程。\r\n 本书主题包括:\r\n ·Internet开发范例,包括ISAI和WinSock。\r\n ·如何在服务器中使用线程和overlapped I/O。\r\n ·如何在多线程环境中使用Cruntime函数库和MFC。\r\n ·以C和C++写成的各个范例程序。\r\n ·NUIX环境比较。让UNIX下的开发人员能转移到Win32。
函数索引(Function Index)\r\n常见问答集(Frequently Asked Questions)\r\n第一篇 上路吧,线程\r\n 第1章 为什么要“千头万绪”\r\n 一条曲折的路\r\n 与线程茶枕\r\n 为什么最终用户也需要多线程多任务\r\n Win32基础\r\n Context Switching\r\n Race Conditions(竞争条件)\r\n Atomic Operations(原子操作)\r\n 线程之间如何通讯\r\n 好消息与坏消息\r\n 第2章 线程的第一次接触\r\n 产生一个线程\r\n 使用多个线程的结果\r\n 核心对象(Kernel Objects)\r\n 线程结束代码(Exit Code)\r\n 结束一个线程\r\n 错误处理\r\n 后台打印(Background Printing)\r\n 成功的秘诀\r\n 第3章 快跑与等待\r\n 看似闲暇却忙碌(Busy Waiting)\r\n 性能监视器(Performance Monitor)\r\n 等待一个线程的结束\r\n 在一个GUI程序中等待\r\n 提要\r\n 第4章 同步控制(Synchronization)\r\n Critical Sections(关键区域、临界区域)\r\n 死锁(Deadlock)\r\n 哲学家进餐问题(The Dining Philosophers)\r\n 互斥器(Mutexes)\r\n 信号量(Semaphores)\r\n 事件(Event Objects)\r\n 从Worker线程中显示输出\r\n Interlocked Variables\r\n 同步机制摘要\r\n 第5章 不要让线程成为脱疆野马\r\n 干净地终止一个线程\r\n 线程优先权(Thread Priority)\r\n 初始化一个线程\r\n 提要\r\n 第6章 Overlapped I/O在你身后变戏法\r\n Win32文件操作函数\r\n 被激发的File Handles\r\n 被激发的Event对象\r\n 异步过程调用(Asynchronous Procedure Calls,APCs)\r\n 对文件进行Overlapped I/O的缺点\r\n I/O Completion Ports\r\n ……\r\n第二篇 多线程程序设计的工具与手法\r\n 第7章 数据一致性(Data Consistency)\r\n 第8章 使用C Run-time library\r\n 第9章 使用C++\r\n 第10章 MFC中的线程\r\n 第11章 GDI与窗口管理\r\n 第12章 调试\r\n 第13章 进程之间的通讯(Interprocess Communication)\r\n第三篇 真实世界中的多线程应用程序\r\n 第14章 建造DLLs\r\n 第15章 规划一个应用程序\r\n 第16章 ISAPI\r\n 第17章 OLE ActiveX COM\r\n附录A MTVERIFY宏\r\n附录B 更多的信息
thread就是"线". 台湾计算机术语采用"绪"这个译词, "绪"就是"线"的雅称, multithread就是"多绪". 大陆计算机术语采用"线程"一词, multithread就是"多线程".
Threads(线程)是比processes(进程)更小的执行单元, CPU的调度与时间分配皆以threads为对象.
计算机领域中早就存在threads的观念和技术, 但是早期个人电脑操作系统(主要是DOS), 别说multithread, 连multitask, multiuser亦不可得. 因此, 从当时, 乃至延伸至今, threads的概念和功能对许多非计算机专业科班出身者而言, 属于一种"崇高而难以亲近"的位阶, 对许多计算机专业科班出身者而言, 却又只是"操作系统"这门课里高高在上的一个名词.
本书第一章第一句话值得玩味:"计算机工业界每有新的技术问世, 人们总是不遗余力地去担忧它是不是够重要. 公司行号虎视眈眈地注意其竞争对手, 直到对方采用并宣扬这技术有多么重要, 才开始急急赶上. 不论这技术是不是真的很重要, 每一个人都想尽办法让终端用户感觉真的很重要. 终端用户终于真的觉得需要它了--即使他们完全不了解那是什么东西. "
threads大约就是这么一种东西吧. OS/2. Windows NT. Windows 95这类"新一代PC操作系统"初上市时, 便一再强调其抢先式多任务(preemptive multitasking)的多线程(multithreaded)环境. 拜强势行销之赐, 霎时间线头到处飞舞, 高深的计算机术语在街巷里弄之间传播了开来, 颇有点 "Neural Fuzzy"洗衣机的味道.
这倒也算是好事!
搞不清楚threads是什么, 对终端用户而言或许没有关系, 对技术人员可就不妙. Threads绝对可以缩短程序的执行时间吗?应该尽量多产生threads来帮助程序工作吗?任何种类的程序都可以获得multithreads的好处吗?错!错!错!似是而非的观念可能会把你的程序带往更坏(而非更好)的境界.
Threads不是新东西, 但它借着 Windows 的庞大装机量初次广泛进入个人电脑世界, 带给个人电脑巨大的冲击. 产生threads毫无困难, 要让它们分工容易, 而要让它们合作, 那可就得花相当多的心思. Threads不一定带来好处, 运用不当的话, 它会在执行效率上惩罚你.
Threads是 Win32 操作系统和 Win32 程序设计不可或缺的重要环节, 每一本重量级Win32程序设计书籍都不会忽略这个题目(请参考附录B). 但是这些书多半仅以一章(甚至只是一节)来介绍这个题目. 不够, 真的不够, 我们缺乏一本兼具理论并重实际的threads专著. 《Multithreading Applications in Win32》的内容兼具理论和实际, 轻薄短小的身形则在大部头书当道的今天让我们心情轻松. 这是一本导入性书籍, 在threads专著里算是比较容易入门的. 但是你必须知道, threads不可能让你轻松学习!同步控制. 多线程通讯. 数据一致性……样样耗费你的心神, 考验你专心致志的程度. 读这本书, 还请你武装一下自己的精神.
对于中译本, 我有以下两点说明:
1. 译本内的程序实例直接取自书附光盘. 如果与英文版书面代码稍有出入, 恐怕是因为作者直接在实际程序上做了点小变动而未能及时反应到书面. 如果出现这种差异, 我会在程序代码列表之后以译注的方式告诉你.
2. 译本保留了相当多的原文技术术语, 主要是考虑本书的潜在读者层. 如果不采用原文术语, 可能各位反而要倒译回去半看半猜, 那么译本的价值就适得其反了. 许多地方我不厌其烦地在中文术语后面加上原文术语, 为的也是同样的原因.
3. Multithreading非常重要. 当支持多处理器(multiprocessor)的操作系统逐渐普及时, 具备多处理器的个人计算机也逐渐普及. 我相信, 多线程程序设计是每一位技术人员都必须面对的技术. 即便现在, 多线程能够提高多人. 多任务程序的使用者接口(UI)反应度, 同样也是高阶技术人员应该追求的目标.
侯捷 新竹 1997.05.31
jjhou@jjhou.com
http://www.jjhou.com(繁体中文)
http://jjhou.csdn.net(简体中文)
Jim Beveridge操作系统的研究领域中已有15年之久,从多处理器数据库到microkernel操作系统的开发,都有经验。他于Rochoester Institure of Technology获得计算机科学学士学位。他目前受聘为Turning Point Software公司顾问。