应用软件可用各种编程软件来编写的。
这些编程软件使用的语言可有C或C++语言,Bisic,Pascal语言,Java,易语言等在各种编程软件的平台上按语言的语法要求编写代码,通过编译成应用程序。
步骤1 获取ApplicationId。客户端通过RPC协议ClientRMProtocol向ResourceManager发送应用程序提交请求GetNewApplicationRequest,ResourceManager为其返回应答GetNewApplicationResponse,该数据结构中包含多种信息,包括ApplicationId、可资源使用上限和下限等。
步骤2 提交ApplicationMaster。将启动ApplicationMaster所需的所有信息打包到数据结构ApplicationSubmissionContext中,主要包括以下几种信息:
(1) application id
(2) application 名称
(3) application优先级
(4) application 所属队列
(5) application 启动用户名
(6) ApplicationMaster对应的Container信息,包括:启动ApplicationMaster所需各种文件资源、jar包、环境变量、启动命令、运行ApplicationMaster所需的资源(主要指内存)等。
客户端调用ClientRMProtocol#submitApplication(ApplicationSubmissionContext)将ApplicationMaster提交到ResourceManager上。
(ResourceManager收到请求后,会为ApplicationMaster寻找合适的节点,并在该节点上启动它)。
客户端可通过多种方式查询应用程序的运行状态,其中一种是调用RPC函数ClientRMProtocol#getApplicationReport获取一个应用程序当前运行状况报告,该报告内容包括应用程序名称、所属用户、所在队列、ApplicationMaster所在节点、一些诊断信息、启动时间等。
(2)编写ApplicationMaster
ApplicationMaster需要与ResoureManager和NodeManager交互,以申请资源和启动Container,期间涉及到多个数据结构和两个RPC协议。具体步骤如下:
步骤1 注册。ApplicationMaster首先需通过RPC协议AMRMProtocol向ResourceManager发送注册请求RegisterApplicationMasterRequest,该数据结构中包含ApplicationMaster所在节点的host、RPC port和TrackingUrl等信息,而ResourceManager将返回RegisterApplicationMasterResponse,该数据结构中包含多种信息,包括该应用程序的ACL列表、可资源使用上限和下限等。
步骤2 申请资源。根据每个任务的资源需求,ApplicationMaster可向ResourceManager申请一系列用于运行任务的Container,ApplicationMaster使用ResourceRequest类描述每个Container(一个container只能运行一个任务):
1) Hostname 期望Container所在的节点,如果是“”,表示可以为任意节点。
2) Resource capability 运行该任务所需的资源量,当前仅支持内存资源。
3) Priority 任务优先级。一个应用程序中的任务可能有多种优先级,ResourceManager会优先为高优先级的任务分配资源。
4) numContainers 符合以上条件的container数目。
一旦为任务构造了Container后,ApplicationMaster会使用RPC函数AMRMProtocol#allocate向ResourceManager发送一个AllocateRequest对象,以请求分配这些Container,AllocateRequest中包含以下信息:
1)Requested containers 所需的Container列表
2)Released containers 有些情况下,比如有些任务在某些节点上失败过,则ApplicationMaster不想再在这些节点上运行任务,此时可要求释放这些节点上的Container。
3)Progress update information 应用程序执行进度
4)ResponseId RPC响应ID,每次调用RPC,该值会加1。
ResourceManager会为ApplicationMaster返回一个AllocateResponse对象,该对象中主要信息包含在AMResponse中:
1)reboot ApplicationMaster是否需要重新初始化当ResourceManager端出现不一致状态时,会要求对应的ApplicationMaster重新初始化。
2)Allocated Containers 新分配的container列表。
3)Completed Containers 已运行完成的container列表,该列表中包含运行成功和未成功的Container,ApplicationMaster可能需要重新运行那些未运行成功的Container。
ApplicationMaster会不断追踪已经获取的container,且只有当需求发生变化时,才允许重新为Container申请资源。
步骤3 启动Container。当ApplicationMaster(从ResourceManager端)收到新分配的Container列表后,会使用RPC函数ContainerManager#startContainer向对应的NodeManager发送ContainerLaunchContext以启动Container,ContainerLaunchContext包含以下内容:
1)ContainerId Container id
2)Resource 该Container可使用的资源量(当前仅支持内存)
3)User Container所属用户
4)Security tokens 安全令牌,只有持有该令牌才可启动container
5)LocalResource 运行Container所需的本地资源,比如jar包、二进制文件、其他外部文件等。
6)ServiceData 应用程序可能使用其他外部服务,这些服务相关的数据通过该参数指定。
6)Environment 启动container所需的环境变量
7)command 启动container的命令
ApplicationMaster会不断重复步骤2~3,直到所有任务运行成功,此时,它会调用AMRMProtocol#finishApplicationMaster,以告诉ResourceManage自己运行结束。
注意 整个运行过程中,ApplicationMaster需通过心跳与ResourceManager保持联系,这是因为,如果一段时间内(默认是10min),ResourceManager未收到ApplicationMaster信息,则认为它死掉了,会重新调度或者让其失败。通常而言,ApplicationMaster周期性调用RPC函数AMRMProtocol#allocate向其发送空的AllocateRequest请求即可。
64位程序是指在64位 *** 作系统的编写的程序,根使用什么语言没有太多的关系,有些数据类型的位数可能有变化。
64位 *** 作系统是指特别为64位架构计算机系统而设计的 *** 作系统。“位”,简单地理解就是CPU的寻址空间,实际上包括整个计算机系统架构数据处理位数。
用 Visual C++ 创建在 64 位 Windows *** 作系统中运行的应用程序时,应注意以下问题:
在 64 位 Windows *** 作系统中,int 和 long 是 32 位值。
在 64 位 Windows *** 作系统中,size_t、time_t 和 ptrdiff_t 是 64 位值。
在 32 位 Windows *** 作系统中,time_t 是 32 位值。
应注意代码在哪里采用 int 值和将其作为 size_t 值或 time_t 值处理。数字有可能增长得比 32 位数大,并且数据在被传递回 int 存储时有可能被截断。
%x(十六进制 int 格式)printf 修饰符在 64 位 Windows *** 作系统中不按预期的那样工作;它只对传递给它的值的前 32 位进行 *** 作。
Windows 32 位 *** 作系统使用 %I32x 显示整数。
Windows 64 位 *** 作系统使用 %I64x 显示整数。
%p(指针的十六进制格式)在 64 位 Windows *** 作系统中按预期的那样工作。
class Trangle{
private double a, b, c;//三个边
private double area;//面积
private double perimeter;//周长
public double getArea() {//返回面积
return area;
}
public double getPerimeter() {//返回周长
return a+b+c;
}
public void setA(double a) {//修改边a
thisa = a;
}
public void setB(double b) {//修改边b
thisb = b;
}
public void setC(double c) {////修改边c
thisc = c;
}
public static boolean isTrangle(double a, double b, double c){//判断三个数能否构成一个三角形
if(a <= 0 || b <=0 || c<=0){
return false;
}
return a + b > c && a + c > b && b + c > a;
}
}
class Lader{
private double a;//上底
private double b;//下底
private double h;//高
private double area;//面积
public double getArea() {//返回面积
return (a+b)h/2;
}
}
class Circle{
private double r;//半径
private double perimeter;//周长
private double area;//面积
public double getArea() {//返回面积
return 314 r r;
}
public double getPerimeter() {//返回周长
return 3142r;
}
}
这样:
import javaawt;
import javaawtevent;
import javaxswing;
import javaawtGraphics;
public class MainClass extends JFrame {
public JComboBox box;
int flag = 0;
jpNewPanel jpNewPanel;
public static void main(String[] args) {
MainClass frame = new MainClass();
framesetBounds(650,300,550,550);
framesetDefaultCloseOperation(JFrameEXIT_ON_CLOSE);
framesetTitle("信号灯");
framesetVisible(true);
}
public MainClass() {
box = new JComboBox();
boxaddItem("请选择");
boxaddItem("红灯");
boxaddActionListener(new ActionListener() {
public void actionPerformed(ActionEvent e) {
flag = boxgetSelectedIndex();
jpNewPanelrepaint();
}
});
boxaddItem("黄灯");
boxaddActionListener(new ActionListener() {
public void actionPerformed(ActionEvent e) {
flag = boxgetSelectedIndex();
jpNewPanelrepaint();
}
});
boxaddItem("绿灯");
boxaddActionListener(new ActionListener() {
public void actionPerformed(ActionEvent e) {
flag = boxgetSelectedIndex();
jpNewPanelrepaint();
}
});
add(box, BorderLayoutNORTH);
jpNewPanel = new jpNewPanel();
add(jpNewPanel, BorderLayoutCENTER);
}
class jpNewPanel extends JPanel {
protected void paintComponent(Graphics g) {
superpaintComponent(g);
gdrawOval(150, 0, 120, 120);
if (flag == 1) {
gsetColor(ColorRED);
gfillOval(150, 0, 120, 120);
} else if (flag == 2) {
gsetColor(ColorYELLOW);
gfillOval(150, 0, 120, 120);
} else if (flag == 3) {
gsetColor(ColorGREEN);
gfillOval(150, 0, 120, 120);
}
}
}
}
扩展资料:
注意事项
每个Road对象都有一个name成员变量来代表方向,有一个vehicles成员变量来代表方向上的车辆集合。
在Road对象的构造方法中启动一个线程每隔一个随机的时间向vehicles集合中增加一辆车(用一个“路线名_id”形式的字符串进行表示)。
在Road对象的构造方法中启动一个定时器,每隔一秒检查该方向上的灯是否为绿,是则打印车辆集合和将集合中的第一辆车移除掉。
WINDOWS的应用程序是在net平台上的VS开发工具用C#或C++开发的应用程序,基于的是framwork框架,编程结束后编译后会形成安装包文件,就跟
安装程序
一样,安装了就能使用。单个
EXE文件
则是
控制台程序
,编译后就会生成EXE文件
以上就是关于一般的应用程序都是用什么语言编写的全部的内容,包括:一般的应用程序都是用什么语言编写的、如何编写YARN应用程序、如何编写64位应用程序等相关内容解答,如果想了解更多相关内容,可以关注我们,你们的支持是我们更新的动力!
欢迎分享,转载请注明来源:内存溢出
评论列表(0条)