文档详情

多线程编程技术-Read.PDF

发布:2018-02-09约15.97万字共96页下载文档
文本预览下载声明
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
显示全部
相似文档