多线程编程技术-Read.PDF
文本预览下载声明
Professional Group Tec. DocAuthor-万一飞
多线程编程技术
线程是比进程更小的单位,可以认为进程是由一个或多个线程组成的。据说以前的 400
版本并不支持真正的多线程技术,在 4.2 版后才从内核上提供了对多线程的支持。总之写这
份文档的时候,绝大部分版本应该可以支持。
主要资料来源于 IBM 信息中心的《Programming Multithreaded applications》,加上部分
个人观点。
多线程编程有以下几点特殊性(说好听点叫特殊性,说得直接一点完全就是为什么不使
用多线程技术的理由,按理由的充分性,由小到大排列):
1. 多线程的编程在对 C 程序的使用上要特别小心,详细内容见调用 C 程序的注意事项。
2. 事务处理的作用范围是 JOB 级,或活动作业组级。这也就是说多线程并发时,一个线
程的 COMMIT 操作可能导致另一个线程也执行了 COMMIT 操作。(这是IBM 说的,
不是我的猜想)。所以实际上也就可以认为多线程的并发不能支持事务操作。
3. 对于用户的应用程序来说,大部分 C、RPG 、RPGLE 编写的 PGM 和 MODULE 都不具
备线程安全性,也就是不能被一个进程下的多个线程同时调用,要注意。(不排除是因
为某些参数未掌握好,总之目前测试的结果就是如此)同时也基于此,多线程之下程序
的复用性,维护性就没有单线程下那么方便和自由。
4. 最后,实际测试多线程的效率,只能用令人惊讶来形容 -- 和多进程并发效率居然几
乎是一样的!-_- (程序写起来还麻烦得要死!)
测试方法:
读一个 380 多万条记录的文件,再根据某个键值去 CHAIN 另一个 620 多万条记录
的文件,仅此而已。
根据这个 380 多万条记录的文件的某个关键字,拆分成 200 多个任务,每个任务只
处理自己需要处理的数据。(可以简单的认为每个任务是处理380w/210 条记录吧,其实
并非如此)
多进程分为 10 个进程来处理这 200 多个任务,耗时约 3 分钟(14:40:45 – 14:43:59)。
多线程分为 8 个线程来处理这 200 多个任务,耗时竟然也是约 3 分钟(14:47:03 –
14:50:14),严格的来说,少了 3 秒钟,我估计这 3 秒就是启动 8 个线程比启动 10 个 JOB
要少的时间吧。我在多线程里还特地增加了共享了 ODP 的处理,居然还是只有这个效
果。
看到这里,如果对多线程技术还有兴趣的话,那就请继续往下看吧。我要早知道,也就
不写这么多了。
Professional Group Tec. Doc Author-万一飞
目 录
1 概念 6
1.1 JOB 6
1.2 Process (进程) 6
1.3 Thread (线程) 6
显示全部