在构建 SaaS 应用程序时定义一个多线程阈值

回到云岛:所有 SaaS 用户都很高兴。因为他们能获得快速响应。因为这些用户惟一拥有的控制权就是对 访问应用程序的控制,他们不担心应用程序是否有多线程例程;也不担心在云中有多少核心用于并行加速多线 程的处理。问题应用程序被成功地从内部多线程 COBOL 遗留系统中迁移出来。

当然,有一天,SaaS 应用程序的速度会慢下来,而且越来越慢;直到用户无法忍受。他们这时才发现:

只有一个核心在正 常运行,其余核心都发生了故障。

SaaS 订阅仅限于两个核心,而不是所有四个核心。

SaaS 应用程序近 来升级出现了多线程缺陷。

故障转移计划失败。

同时,在岛上的功能部门,开发团队的人们聚在一 起思考各种解决方案,想让系统再次恢复运转。

本文帮助您探索多线程的性能问题,文中介绍了我第 一次遇到多线程时的遭遇(简言之,我会尽力将损失降至最低)。然后,本文查看了多线程控制模型云用户是 否在 Java 和 COBOL 中进行访问,并创建一个简洁的内置多线程支持。本文旨在向您展示供应商能够采取哪 些积极措施来停止伤害、解决问题、恢复系统和通知客户。

多线程性能

CPU 中的核心越多,在 执行程序代码指令时,多线程的表现就会越好,但是使用的核心数量不是决定多线程软件执行情况的惟一因素 。另一个因素是:对于某个任务或者进程,使用一个算法来完成完整的线程并行并不总是可行的。某些线程的 计算已经在之前的步骤中并行化了,可能得到一个连续的结果。

考虑到应用程序分散在模块中,每个 都被设计用于完成一个任务或者进程。在一个模块中,可以有 6 个几乎并行的单一线程。我们假设:

a 是线程 1,b 是线程 2,c 是线程 3,d 是线程 4,e 是线程 5,f 是线程 6

结果 r0、r1 和 r2 分别作为两个独立线程的组合并行线程进行计算,如下所示:

r0 = a + b
r1 = c + d
r2 = e + f

然而,添加所有三个并行线程结果(r0,r1 和 r2)会得到连续结果 g — 这并不是一 个新并行线程,如下所示:

g = r0 + r1 + r2

所有连续的部分都必须等待上一步中并行化的线 程发出准备好的信号。程序中的连续部分越多,从多核中获得的好处就越少。

其他影响多线程算法的 因素包括:

COBOL 的 THREAD 编译器选项限制。

Java 的多线程程序的限制。

将紧耦合 COBOL 程序中的缺陷分解到松耦合 SaaS 应用程序中。

云用户控制。

多线程阈值缺失。

我第一次遭遇线程

十几年前,在我第一次使用主机 COBOL 时,我考虑用非 COBOL 语言与其交互。我与一位教授进行了 有关的讨论,计划将此作为有关 COBOL 界面性能的论文主题。我分享了关于在程序代码中并行化线程来获得 子程序的想法。

为了弄清楚什么会影响性能,我根据 “Fortran 界面适用于 CODASYL 数据库任务组 规范”(参阅 参考资料)对迷你 COBOL/Fortran 界面进行了实验。Fortran 是当时的流行语言。那个时候, COBOL 还不像我们现在这样拥有 THREAD 选项。与如今我们见到的大型处理器相比,当时最大容量的处理器也 非常小。

在我的实验中,我发现部分 COBOL 数据类型没有 Fortran 等同物。当应用程序不再需要的 数据或者对象存在于磁盘上时,我根据需要调用子程序绕开了内存限制,然后在不需要数据或者对象时释放它 们并自动删除不再需要的数据。

每个子程序执行一个或者多个任务。在某些任务中,几个线程作为一 个并行线程进行计算(r0 = 线程 a + 线程 b)。所有连续部分都在等待上一步中的并行化线程发出准备好的 信号。等待很短暂。

如果当时我们有云,就可以使用运行在多核虚拟机上的平台即服务 (PaaS) 上的 多线程例程来开发一个 SaaS 应用程序。

时间: 2024-07-30 05:56:39

在构建 SaaS 应用程序时定义一个多线程阈值的相关文章

在PaaS上构建SaaS应用程序需要注意什么

遗留系统含有成千上万个执行一大批业务功能的服务组件.比如说,假设贵企业运行的一个内部遗留系统中的一套组件向企业高管提供一份统计报告.为了赶在截至日之前获得这份每周提交的报告,该高管应该考虑将必要的组件迁移到新的软件即服务(SaaS)应用程序. 如果经济可行性研究表明这种迁移是明智的决策,他应该与其他高管以及由开发人员.系统工程师和业务分析人员组成的一个团队合作,将遗留系统细分成多个组件,然后着手开发那个应用程序. 1.识别遗留系统资产 开发团队.高管和遗留系统负责人需要识别遗留系统的资产.这些资

c#-【强迫症】编写C#程序时定义属性遇到的问题

问题描述 [强迫症]编写C#程序时定义属性遇到的问题 在一个类中定义属性时: private string adminName; public string AdminName { get { return adminName; } set { adminName = value; } } 这算比较常规的写法吧. 可是我在阅读开源项目的例子时,见到了这样的写法 public string AdminName { get; set; } 请问,上面的这种写法正确吗?定义类的属性时,这么用对吗? 与

class-cmd编译java程序时的一个问题

问题描述 cmd编译java程序时的一个问题 使用javac编译一个java程序时,如果该java文件导入了其他的类,只能将导入的类一个一个手动编译吗?有没有什么其他便捷的方法? 解决方案 Exception in thread "main" java.lang.NoClassDefFoundError: comexampleMain 问题一个解决思路......答案就在这里:编译java程序时的一个问题 解决方案二: 如果是测试的话你也可以把其他类嵌套到一个类测试,这样就可以监测其功

C#应用程序(不是ASP),做成安装文件,系统里安装之后,在安装目录里面就是我写程序时定义项目,可以用记事打开

问题描述 我用VS2005C#写了一个程序有一个DBDAO类,4个form类,配置文件写了之后用VS2005自带的安装部置项做了个安装文件可是我在其它电脑安装之后,查看安装之后程序所在的目录,里面就是我写那4个form,DBDAO,配置文件app.config这太不安全,这些类和文件直接用记事体打开请问各位高手,我在做安装文件时有什么不对,或者做对,有什么方法,可把这些类或文件代码隐藏或以其它形式显示!急急急请不吝赐教!!

针对SaaS应用程序的基于Hibernate框架的数据库分片

针对 SaaS 应用程序的基于 Hibernate 框架的数据库分片 SaaS 正在改变设计.构建.部署和操作应用程序的方式.开发一个 SaaS 应用程序与开发一个通用企业应用程序之间的关键区别在于,SaaS 应用程序必须是多租户的.其他关键 SaaS 需求,比如安全性.定制.面向服务的架构(SOA)和集成,也影响 SaaS 应用程序架构. 多租户是指应用程序在单一代码库内寄存多个承租者并共享数据库等架构的能力.有多种设计选项可启用多租户数据架构 - 每个承租者的专用数据库.每个承租者的共享数据

用Ext JS构建Ajax应用程序:一种用于富因特网应用程序开发的JavaScript框架

简介:Ext JS 是一种强大的 JavaScript 库,它通过使用可重用的对象和部件简化了 Asynchronous JavaScript + XML(Ajax)开发.本文介绍 Ext JS,概述它背后的面向对象 JavaScript 设计概念,解释如何使用 Ext JS 框架开发富因特网应用程序的用户界面元素. 当今有许许多多的 Web 开发框架,开发人员很难判断哪些框架值得花时间去学习.Ext JS 是一种 JavaScript 开发框架,这种强大的 JavaScript 库通过使用可重

COBOL和Java在SaaS应用程序中交互时遭遇多线程挑战

回到云岛:所有 SaaS 用户都很高兴.因为他们能获得快速响应.因为这些用户惟一拥有的控制权就是对访问应用程序的控制,他们不担心应用程序是否有多线程例程:也不担心在云中有多少核心用于并行加速多线程的处理.问题应用程序被成功地从内部多线程 COBOL 遗留系统中迁移出来. 当然,有一天,SaaS 应用程序的速度会慢下来,而且越来越慢:直到用户无法忍受.他们这时才发现: 只有一个核心在正常运行,其余核心都发生了故障. SaaS 订阅仅限于两个核心,而不是所有四个核心. SaaS 应用程序近来升级出现

qtcreator 运行程序时可以构建通过,但总是程序异常结束

问题描述 qtcreator 运行程序时可以构建通过,但总是程序异常结束 大神们,能帮我看看是哪的问题吗?最近在帮老师做项目,完不成的话会挨批的,然而qtcreator一直有问题啊啊啊,所以我很着急,希望大家能多多帮忙,谢谢大家了~~~!!!!新手没有钱,希望大家还是帮忙看看,好人会有福报的~~ qtcreator+MSVC2013+opencv2.4.9 构建时没有错误,但构建完成后程序总会异常结束,截图如下: 我的.pro中的代码段如下: QT += core gui greaterThan

如何定义一个类 编译时,使得第一行报错,第二行正确

问题描述 如何定义一个类Aint main(){ A a; //第一行 A *b=new A(); //第二行}如何定义一个类 编译时,使得第一行报错,第二行正确 问题补充:enet_java 写道 解决方案 [quote java]#include "stdio.h"class test{public:static test* getinstance(){return(new test());}int puthello(){puts("hello world");