任务导向编程:SAS 开发的新范式
1. 线程编程的困境
在软件开发中,多线程编程一直是实现并行处理的重要手段,但它也存在诸多问题。
- 不确定性问题 :多线程程序每次运行的结果可能大不相同,这是因为线程的调度由操作系统负责,而每次运行时系统的整体状态都不一样。软件开发人员很难应对程序中这种看似随机的状态。为了控制这种不确定性,通常会使用同步机制,如临界区、信号量和锁等。然而,这些同步原语的语义并不简单,开发人员往往需要花费更多的时间来实现同步,而不是解决实际问题。对于 SAS 开发人员来说,他们应该把更多的时间花在处理分析或业务问题上,而不是应对操作系统开发人员施加的限制。
- 同步开销问题 :引擎或操作系统为了保持多个线程的同步需要进行大量工作,当线程数量达到 50 个左右时,这种开销通常会超过实际的有效工作量。随着多核处理器的发展,我们期望能够使用数千个核心,50 个线程显然远远不够。
由于多线程编程的难度较大,通常只有专业的软件开发人员才能胜任。这意味着 SAS 用户往往只能使用现有的多线程程序,如 PROC SORT,而无法编写自己的模型,只能对现有模型进行参数化和利用。
2. 任务的概念
为了解决多线程编程的问题,引入了任务导向开发的概念。
- 任务的定义 :任务是一个定义了输入和输出的 SAS 程序。与函数类似,函数是一组可以接受一组参数的指令,以便使用不同的输入重用这些指令。近年来,函数定义通常会定义多个返回值,如 res1, res2 = function ( in1, in2 )
超级会员免费看
订阅专栏 解锁全文
117

被折叠的 条评论
为什么被折叠?



