COBOL的调用可以是静态调用(Static Call),这时,被调用的子程序必须与调用程序一起链接(link-edited)起来形成一个完整的装载模块(Load module),但子程序依然可以单独编译。这种方法会生成一个大的模块,同时也使得多个主程序调用同一个子程序时共享程序拷贝的愿望落空。另外一种COBOL调用方法是动态调用(Dynamic CALL),这时,被调用的子程序必须编译和链接成一个独立的装载模块(Load module)。它可以与主程序一起放到同一个装载模块库中。当有多个主程序调用同一个子程序时,大家可以共享它的程序拷贝。 在CICS中我们使用LINK或XCTL命令调用CICS子程序,是否我们可以使用COBOL的(静态的(Static)或动态的(Dynamic)CALL语句呢?COBOL的CALL语句在CICS中到底会有什么样的效果呢?如果可以,那么COBOL CALL与CICS的LINK或XCTL有什么区别呢?哪种方法效率更高? 许多程序员甚至工作过很多年的大机CICS程序开发人员都有类似的疑问,很难清晰地回答上面的问题,现在,借此机会,我们一起来回答它。 COBOL静态调用是用CALL LITERAL(文字常数),程序是用COBOL的编译选项NODYNAM编译的。被调用程序必须由调用者进行连接编译,并与调用程序一起生成一个装载模块。  COBOL动态调用使用CALL VARIABLE(变量),不管COBOL编译是用DYNAM或NODYNAM选项,都是动态调用。动态调用的程序会生成独立的装载模块,因此可以被多个调用者共享。 COBOL的CALL语句可以说类似于LINK语句,因为它们都会转移到下一逻辑层运行,但XCTL则在同一逻辑层运行。此外,CALL语句象LINK一样在执行完后一定要将控制权转移回调用程序而XCTL则不用。在CICS中,程序之间是通过DFHCOMMAREA来传递信息的。XCTL命令相对于LINK命令来说,开销要小些,因此性能要优越些。此外,调用程序不会指望被XCTL的程序将控制权转移回调用程序。 在CICS中我们可以使用CALL语句动态调用子程序,但这时,子程序必须定义在CICS的程序处理表(PPT)表中,而在CICS中使用CALL语句调用子程序也只能在VS COBOL II中 才可以,换句话说,COBOL 74不支持这种方法。 毫无疑问,我们可以使用COBOL CALL语句代替CICS LINK命令,但是,它代替不了XCTL命令。有许多理由支持使用动态调用(Dynamic CALL)比静态调用(STATIC CALL)更好。假定我们使用动态调用,它与CICS LINK语句的区别是:  COBOL CALL比LINK有更好的性能,因为CALL与主程序处在同一个运行单元(Run unit)中,而LINK与调用程序处于不同的运行单元中。  COBOL CALL可以用来在主程序和子程序之间传递最多32K的通讯区。  COBOL CALL可以传递多个数据项而LINK只能传递一个数据项即DFHCOMMAREA。  COBOL CALL只能使用在单个CICS区域(Region)中而LINK可以在不同的CICS区域中转移控制,LINK是为了支持类似于VS COBOL中的CALL语句而创建的。 事实上,我们可以使用三种方法调用子程序:  使用COBOL CALL语句  使用CICS LINK命令  使用CICS XCTL命令 如果你使用静态CALL语句,则每次编译时你必须连接到被调用程序而每个调用程序都会有一个被调用程序的拷贝。比如,程序ProgA、程序ProgB和程序ProgC都静态调用程序ProgD,这时,在内存中就会有ProgD的三个拷贝,分别供ProgA、ProgB和ProgC使用。 另一方面,如果你使用LINK或XCTL语句,则在CICS区域中只有ProgD的一个拷贝被调用程序ProgA、ProgB和ProgC共享,因为在CICS中,程序是可重入(re-enterrant)的,这样,每个调用程序会有自己的区域但被调用程序会在所有调用程序之间共享。 所以,从CICS资源的角度来看,它们是有区别的。毫无疑问,使用COBOL静态CALL时由于每个调用程序有单独的被调用程序区域,运行效率当然要高些,但对CICS的资源来说,则是很大的负担。所以,除非被调用程序使用得非常频繁,使用LINK和XCTL更好一些。 除此之外,还有一些因素也是我们需要考虑的: 小心使用CALL语句,因为你所调用的子程序使用的内存空间会累积起来,从而大量增加你的交易使用的内存空间。它会使你的内存使用量迅速提高。使用LINK命令时,属于被调用程序的工作区(Working storage)会在程序返回调用程序时会释放出来,所以,使用LINK命令会降低你的内存的消耗,它会自己打扫战场。而COBOL CALL从内存使用的角度来看是笨蛋。被调用程序的工作区只有在运行单位结束时才会释放。这种情况典型地出现在从CALL语句返回时,而从LINK语句返回时则不会发生。 如果你喜欢CICS调试工具CEDF,你就会知道它不会显示CALL语句的活动但却会显示LINK命令的活动。这也是本人喜欢LINK比CALL多一点的原因之一。同样你在阅读系统跟踪(Trace)报告时,也会发现它只报告CALL语句的只言片语,但对于LINK命令则有详细的报告,这是本人喜欢LINK多过CALL的另外一个小原因。 静态调用(STATIC CALL)管理起来更困难因而不值得考虑它所产生的一点点额外的效能。静态调用的另外一个问题是,当你修改子程序时,你必须修改所有调用它的主程序,这是令人讨厌也是容易出错的。我的建议是,总是使用动态调用除非你有令人信服的理由要使用静态调用。 如果在你的程序中混合使用LINK和CALLs则你的交易确实要消耗大量的内存空间。例如,假定我们有三个程序分别是A、B和C。考虑下面的情节:  A CALL C, C 返回 A  A LINK B  B CALL C 这时,系统需要分配4个而不是3个工作区(working storage)。程序A和B各有一个工作区,而程序C则要二个工作区。C需要分配二个工作区是因为它需要在二个不同的运行单元中运行。在上面的例子中,如果只使用CALL则只需要分配3个工作区。 再补充说一下XCTL命令。我们只在从一个画面(MAP)跳到下一个画面时才使用XCTL命令。换句话说,只是在画面层而不是在业务处理层使用XCTL命令。 

转载于:https://www.cnblogs.com/kakaisgood/p/9712813.html

静态call 动态call LINK相关推荐

  1. Python爬虫: 单网页 所有静态网页 动态网页爬取

    Python爬虫: 单网页 所有静态网页 动态网页爬取 前言:所有页代码主干均来自网上!!!感谢大佬们. 其实我对爬虫还挺感兴趣的,因为我玩instagram(需要科学上网),上过IG的人都知道IG虽 ...

  2. C/C++ 跨平台交叉编译、静态库/动态库编译、MinGW、Cygwin、CodeBlocks使用原理及链接参数选项

    0. 引言 UNIX是一个注册商标,是要满足一大堆条件并且支付可观费用才能够被授权使用的一个操作系统.linux是unix的克隆版本,是由其创始人Linus和诸多世界知名的黑客手工打造的一个操作系统. ...

  3. ☆超简单css两张静态图片制作动态星空图(无需js和canvas,附所有代码复制即可用)

    css两张静态图片制作动态星空图 上个效果图,gif图像质量问题所以显示月亮蓝边,实际上很好看 需要素材: star.html代码如下 <html lang="en"> ...

  4. 从静态到动态,词表征近几十年发展回顾

    2020-04-01 18:45:38 作者 | 杨晓凡 编辑 | 丛末 在自然语言处理技术的整个发展历史中,如何把最小语义元素「单词」做数字化表示,一直都是一个研究热点. 近几年,用海量无标记文本数 ...

  5. 【Android 插件化】Hook 插件化框架 ( Hook 技术 | 代理模式 | 静态代理 | 动态代理 )

    Android 插件化系列文章目录 [Android 插件化]插件化简介 ( 组件化与插件化 ) [Android 插件化]插件化原理 ( JVM 内存数据 | 类加载流程 ) [Android 插件 ...

  6. 【华为】华为模拟器模拟静态、动态NAT、PAT技术

    实验拓扑: 实验目的:1.利用静态.动态NAT技术使C1.C2ping通AR2. 2.利用PAT技术ping通. 实验步骤:1.如图配置好C1.C2 IP地址.掩码.网关. 如实验拓扑所示接好线.配置 ...

  7. 浅析php-fpm静态和动态执行方式的比较

    这篇文章主要介绍了php-fpm静态和动态执行方式的比较,较为详细的分析了php-fpm静态和动态执行方式的原理.参数功能与相关使用技巧,需要的朋友可以参考下 本文实例讲述了php-fpm静态和动态执 ...

  8. lacp静态和动态区别_lacp静态与动态区别

    大家好,我是时间财富网智能客服时间君,上述问题将由我为大家进行解答. lacp静态与动态区别是: 1.用户权限不同.动态lacp汇聚是一种系统自动创建/删除的汇聚,不允许用户增加或删除动态lacp汇聚 ...

  9. 静态和动态include

    今天突然意识到野猪对静态和动态的include的区别理解有点模糊,现在总结一下: 动态include:<jsp: include page="include.jsp" ful ...

最新文章

  1. Spring Cloud中Hystrix仪表盘与Turbine集群监控
  2. 开源版本_重磅!阿里开源 OpenJDK 长期支持版本 Alibaba Dragonwell
  3. mysql查询去重第一条_Mysql用法记录 - Ashley-OSCHINA的个人空间 - OSCHINA - 中文开源技术交流社区...
  4. 选择排序稳定吗_最常见的四种数据结构排序算法你不知道?年末怎么跳槽涨薪...
  5. 维护无后效性的技巧——立即计算代价
  6. 高级指引——手动创建节点分组 Group
  7. 导航第四版-分类专栏
  8. c语言注释换颜色,C语言实现注释转换
  9. spark work启动失败
  10. 数据结构上机实践第八周项目2- 建立链串的算法库
  11. educoder 初始mongodb
  12. TASKCTL4.1安装选项详解
  13. 【5G/4G】ZUC算法源码介绍
  14. Linux打印命令lp详解
  15. 基于深度卷积神经网络(D-CNN)的图像去噪方法
  16. 常见开发相关变量命名词汇
  17. SRCK5 SR3LC SR3YZ SREJP SR3L8
  18. 从2.3.3到4.1.1:最全的android系统源码下载大集合
  19. android statusbar背景,Android踩坑记之沉浸式StatusBar
  20. GPS北斗定位模块应用于车辆

热门文章

  1. python excel 操作
  2. 友友企业地图(Enterprise MAP)
  3. 企业管理 为什么老板再难,也不会放弃?而员工做得不顺,就想逃走?
  4. DHCP冲突的解决方法
  5. 打造最美HTML5 3D机房(MONO哥强势归来,第四季惊艳发布)
  6. Linux系统管理员面试50题
  7. struts2学习笔记--拦截器(Interceptor)和登录权限验证Demo
  8. libreoffice
  9. 图像处理之边缘检测概述
  10. DPM2010恢复exchange2010单个用户邮箱邮件