1. 首页 > 科技

【广播机制】float类型的Tensor不支持广播机制吗? 简述广播机制实现过程

【广播机制】float类型的Tensor不支持广播机制吗?简述广播机制实现过程

JAVA程序补充填空:定义一个Student类,包含姓名、身高、体重,以及talk()方法。

Comparable,

flag=this.weightpareTo(o.weightpareTo);

Arrays.sort(ps);

C语言为什么错了illegal, left operand has type 'float *'

1. 这是个编译时的错误。意思是:非法,左操作数是float *类型。造成这个错误的原因是因为数据类型不匹配。

2. 例如:

float a,b,c;

scanf("%d%f%d",&a,&b,&c);

//这样就会造成illegal, left operand has type 'float *'这个错误,因为控制符号里面是%d整形,而对应的变量a,c都是浮点型。类型不匹配就会发生这种错误。

广播机制是什么?

1. 介绍

在高速局域网中使用广播是一种通常的作法。因为IP中未指出广播的通用标准,因此协议实现者也就无法使用它了。这里我们考虑的是不可靠的,非串行的,包可重复的广播。我们假设数据链路层支持有效的广播,通常的网络如以太网,令牌网都支持广播。我们不能假设广播传输是可靠的,因为这样做代价太大,但我们假定主机发出的广播大部分还是能够到达目的地的。因为广播会对网络造成过大的负担,因此不能无限制地使用。

2. 为何采用广播

广播在主机不知道消息发送者的位置时是有用的,广播在主机需要为许多机器提供数据时也有作用。主机需要的信息可能在它的邻居中,它可以一一询问而得知,而把这些主机的地址固定存储是不合适的,因为主机的邻居可能会变化,这对管理是一个学生的负担。而对所有邻居的地址进行一一询问简直不可能,因为需要询问的主机的数目会太多。使用广播就不会出现这种问题。在主机需要邻居的信息时广播有用,当主机有信息需要向邻居传送时广播也很有用,例如网关就可以通过广播告知邻近的网关它的存在。我们会认为组播可能会代替广播,但是广播在硬件一层(或低层是进行的),而上层软件将不必要的信息过滤掉达到的效果就是组播。

3. 广播级别

有下面几种IP广播:

在本地网上进行单目的地广播:发送主机知道目的机地址,但在数据链路层进行广播,这是可能是为了避免进行路由。因为不是IP广播,所以IP层不需要介入。

在本地网上对所有主机进行广播:IP的主机号部分可以指定一个特定的值,这个值指出是广播。接收IP必须能够识别这个地址和它本身原有的地址。这是最常用的一种广播形式,它也是ARP,名字服务器,时间服务器等运作的基础。

对远程网的所有主机进行广播:它的机制和本地广播差不多,数据报在到达此网的网关前还是象平常一样传输,到达网关后再进行广播。

多子网广播:可以使用IP地址子网号表示这种广播。它的工作原来和对一个远程网进行广播相同,不过是对多个子网而已。

向整个Internet广播:这种广播可能根本没有用,而且也不会有人使用。

因为安全和效率的考虑,网关可以不转发广播,在自治系统中最好不要转发广播。

4. 广播方法

主机的IP接收层必须能够支持广播。有了广播机制,主机必须能够对接收到的数据报中的目的地址进行比较,看和自己的IP地址是不是一样,而且还必须能够知道这个地址是不是个广播地址,如果是也要接收。因为在数据链路层已经解决了广播问题,所以IP层主机如果需要广播只要发出带有广播地址的包就行了。网关上的算法要复杂一些。

但是在有子网的网络内进行广播可能比较麻烦。即使如此,也有相应的算法解决这个问题,而且不怎么费事。一个好的广播方法要达到下面几个条件:

不改变IP数据报格式

在进行多复本传输和路由选择时代价不能太大

对网关的改变要小

传输机制一致

对于算法来说,RPF(Reverse Path Forwarding)比较合适。RPF在代价和可靠性上是中等的,易于实现,而且不需要,对网关修改也比较少。

5. 网关与广播

在网关接收到本地广播时,它需要做一些工作,虽然简单,可如果处理不好会造成无限循环。正确处理有赖于下面几项:子网,目标网络,网关地址。

基本的方法就是不要向接收到广播的硬件地址再发广播了,可是这还不够 ,如果一个网络中有多个网关,可能会造成广播永远不会停止

如果数据报在硬件网络(也就是低层)上被接收,不应该转发,网关应该把自己看做是数据报的目的地。

如果数据报未在硬件网络上被接收,而且数据报地址来自于网关相邻的网络上,网关应该在数据链路层上进行广播,网关自己应该被看作是数据报接收的目的地

如果数据报的目的地在远方网络,网关只需要象平常一样转发这个包到下一个网关就是了

6. IP广播地址规范

如果不同的IP实现能够兼容,必须有规则可以区别所有主机和所有子网。因为本地网络层可以映射IP地址到数据链路层地址,选择IP广播主机号则是比较直接的。简单起见,可以把一个别的机器不用的地址用于广播主机号。全1地址可以。全部子网号也是全1的,因为主机在发送广播到远程网络时并不关心那个网络分不分子网。而255.255.255.255表示本地硬件地址广播,不能进行转发。因此,一台在网络号为36的网络上的主机可以

向255.255.255.255发包达到向相邻主机广播的目的

向36.255.255.255发包达到向36网络上所有子网进行广播的目的

一个好的应用程序应该首先向第一个地址进行广播,如果没有回应,再向第二个地址进行广播。全1地址指广播,那么全0地址指本地,如36.0.0.0指网络36,而36.255.255.255指网络36上的所有主机。

12、注册广播有几种方式,这些方式有何优缺点?请谈谈Android引入广播机制的用意。

注册广播的分类:静态注册和动态注册。

静态注册:在清单文件里直接注册,从app开启到app销毁,一直在接收广播,接收广播时间长,但是接收广播的优先级低于动态注册广播。

动态注册:动态注册,动态销毁,从onCreate到取消注册,期间接收广播,接收广播时间是短且可控,接收广播的优先级高。例如:

发送广播:

Intent i = new Intent();

i.setAction("ACTION_CLOSE");

sendBroadcast(i);

接受广播:

onCreate(){

//注册广播的接受者

IntentFilter filter = new IntentFilter();

filter.addAction("ACTION_CLOSE_ACTIVITY");

receiver = new InnerReceiver();

registerReceiver(receiver, filter);

}

private class InnerReceiver extends BroadcastReceiver {

   @Override

   public void onReceive(Context context, Intent intent) {

      //TODO 当前Activity接收到广播 需要做的事情

       }

   }

}

//注销广播

@Override

protected void onDestroy() {

   super.onDestroy();

   unregisterReceiver(receiver);

}

2.引入广播的原因:

a) 不同的app之间传信通用

b)发出一条指定,需要多个Activity都需要有反应

注意:以上仅供参考,如有疑问,请追问,谢谢。