next

VPX技术基础概论

…衆ロ難τιáo~ 提交于 2021-01-02 15:24:44
VPX技术基础概论 新型 VPX(VITA 46) 标准是自从 VME 引入后的 25 年来,对于 VME 总线架构的最重大也是最重要的改进。它将增加背板带宽,集成更多的 I/O ,扩展了格式布局。 目前, VME64x 已经不能满足国防和航空领域越来越高的性能要求和更为恶劣环境下的应用。许多应用,例如雷达,声纳,视频图像处理,智能信号处理等,由于受到 VME64x 传输带宽的限制,系统性能无法进一步提高。急需要一种新体制的总线,替代现有的 VME64x 总线,以提高系统传输带宽。 1. VPX标准概述 VITA 46 基础标准由 VITA46.0 (基础协议)和 VITA46.1 ( VME 连接)描述,也称为 VPX ,并成功地于 2006 年一月引入。这是一个里程碑,因为我们可以确信 VITA46 标准已经设计和实现出来了。下一步是完成最终文档,并且提交 ANSI (美国国家标准化组织)得到正式 ANSI 批准。 1.1 VPX高速串行总线 VPX 总线是 VME 技术的自然进化,它采用高速串行总线替代并行总线是其的最主要变化。 VPX 采用 RapidIO 和 Advanced Switching Interconnect 等现代的工业标准的串行交换结构,来支持更高的背板带宽。这些高速串行交换可以提供每个差分对儿 250MBytes/sec 的数据传输率。如果 4

Java多线程详解

十年热恋 提交于 2021-01-02 15:21:33
线程对象是可以产生线程的对象。比如在 Java 平台中Thread对象,Runnable对象。线程,是指正在执行的一个指点令序列。在java平台上是指从一个线程对象的start()开始,运行run方法体中的那一段相对独立的过程。相比于多进程,多线程的优势有: (1)进程之间不能共享数据,线程可以; (2)系统创建进程需要为该进程重新分配系统资源,故创建线程代价比较小; (3)Java语言内置了多线程功能支持,简化了java多线程编程。 一、创建线程和启动 (1)继承Thread类创建线程类 通过继承Thread类创建线程类的具体步骤和具体代码如下: • 定义一个继承Thread类的子类,并重写该类的run()方法; • 创建Thread子类的实例,即创建了线程对象; • 调用该线程对象的start()方法启动线程。 class SomeThead extends Thraad { public void run() { //do something here } } public static void main(String[] args){ SomeThread oneThread = new SomeThread(); 步骤3:启动线程: oneThread.start(); } (2)实现Runnable接口创建线程类

ShardingSphere

拜拜、爱过 提交于 2021-01-02 04:10:45
ShardingSphere 在中小企业需要分库分表的时候用的会比较多,因为它维护成本低,不需要额外增派人手;而且目前社区也还一直在开发和维护,还算是比较活跃。 但是中大型公司一般会选择选用 Mycat 这类 proxy 层方案,因为可能大公司系统和项目非常多,团队很大,人员充足,那么最好是专门弄个人来研究和维护 Mycat, 然后大量项目直接透明使用即可。 一、ShardingSphere概念 1、概念 ShardingSphere是一套开源的分布式数据库中间件解决方案组成的生态圈,它由 Sharding-JDBC 、 Sharding-Proxy 和 Sharding-Sidecar 这3款相互独立的产品组成。 他们均提供标准化的 数据分片 、 分布式事务 和 数据库治理功能 ,可适用于如Java同构、异构语言、云原生等各种多样化的应用场景。 如图 2、功能列表 数据分片 - 分库 & 分表 - 读写分离 - 分片策略定制化 - 无中心化分布式主键 分布式事务 - 标准化事务接口 - XA强一致事务 - 柔性事务 数据库治理 - 配置动态化 - 编排 & 治理 - 数据脱敏 - 可视化链路追踪 - 弹性伸缩(规划中) 3、项目状态 二、分库分表---结果归并 概念 将从各个数据节点获取的多数据结果集,组合成为一个结果集并正确的返回至请求客户端,称为 结果归并 。

windows 下重启进程脚本

こ雲淡風輕ζ 提交于 2021-01-01 04:33:53
strPName = "notepad.exe" strComputer = "." Set objShell = CreateObject("Wscript.Shell") Set objWMIService = GetObject("winmgmts:" _ & "{impersonationLevel=impersonate}!\\" & strComputer & "\root\cimv2") Set colProcessList = objWMIService.ExecQuery _ ("Select * from Win32_Process Where Name = '" & strPName & "'") For Each objProcess in colProcessList objProcess.Terminate() Next WScript.Sleep 2000 objshell.Run "c:\windows\system32\notepad.exe" ———————————————————————————— 注: strPName为进程名 objshell run 为进程路径 来源: oschina 链接: https://my.oschina.net/u/4357969/blog/4872213

python3 生成器和生成器表达式

ⅰ亾dé卋堺 提交于 2020-12-31 12:03:38
''' 普通函数 ''' def func(): print (111 ) return 222 ret = func() # 111 print (ret) # 222 111 222 ''' 函数中含有yield就是生成器 ''' def func(): print (111 ) yield 222 gen = func() print (gen) # <generator object func at 0x0000000006085D00> ret1 = gen. __next__ () # 111 print (ret1) # 222 <generator object func at 0x0000000007A8BB48> 111 222 def func(): print (111 ) yield 22 print (333 ) yield 444 gen = func() ret = gen. __next__ () # 111 print (ret) # 22 ret2 = gen. __next__ () # 333 print (ret2) # 444 ret3 = gen. __next__ () # StopIteration: # 值取空,就报StopIteration print (ret3) 111 22 333 444 ---------------

python 生成器和生成器表达式

倖福魔咒の 提交于 2020-12-31 12:03:23
1.生成器   生成器的本质就是迭代器   生成器的特点和迭代器一样.取值方式和迭代器一样(__next__(),send():给上一个yield传值)   生成器一般由生成器函数或者生成器表达式来创建   其实就是手写的迭代器 2.生成函数   和普通函数没有区别.里面有yield的函数就是生成器函数.   生成器函数在执行的时候.默认不会执行函数题.返回生成器   通过生成器的__next__()分段执行这个函数.   send()给上一个yield传值,不能再开头(没有上一个yield),最后一个yield也不可以用send() 3.推导式   1.列表推导式[结果 for循环 条件筛选]   2.字典推导式{k:v for循环 条件筛选}   3.集合推导式{k for循环 条件} 4.生成器表达式   (结果 for循环 条件)   特点:     1.情性机制     2.只能向前     3.节省内存(鸡蛋) 1,用列表推导式做下列小题   (1) 过滤掉长度小于3的字符串列表,并将剩下的转换成大写字母   (2) 求(x,y)其中x是0-5之间的偶数,y是0-5之间的奇数组成的元祖列表   (3) 求M中3,6,9组成的列表M = [[1,2,3],[4,5,6],[7,8,9]]   (4) 求出50以内能被3整除的数的平方,并放入到一个列表中。   (5)

python 生成器

纵然是瞬间 提交于 2020-12-31 11:49:31
生成器可以理解为一种的数据结构,将算法保存,每次计算并返回一个结果,实现了迭代器协议,生成器也是迭代器 生成器有两种表现形式,1)生成器表达式;2)生成器函数 1、生成器表达式 说到生成器表达式,就得先说一下列表推导式 [i for i in range(10)] ,生成器表达式,就是将 [ ] 改为 (),区别如下所示 1 >>> b = [i for i in range(20 )] 2 >>> b 3 [0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17, 18, 19 ] 4 5 >>> b = (i for i in range(20000 )) 6 >>> b 7 <generator object <genexpr> at 0x00000185EC6104F8> 8 >>> next(b) 9 0 10 >>> next(b) 11 1 12 >>> next(b) 13 2 生成器表达式优点:省内存,一次只计算返回一结果。 缺点:不知道有几个元素,只能往后遍历,不能向前遍历,且只能整个生成器只能遍历一次 列表推导式优点:可以通过下标获取元素。 缺点:占用内存大 2、生成器函数 生成器函数:在函数中如果出现了yield关键字,那么该函数就不再是普通函数,而是生成器函数 我们都知道 return

python 生成器的理解和总结

て烟熏妆下的殇ゞ 提交于 2020-12-31 11:37:33
1. 生成器 利用迭代器,我们可以在每次迭代获取数据(通过next()方法)时按照特定的规律进行生成。但是我们在实现一个迭代器时,关于当前迭代到的状态需要我们自己记录,进而才能根据当前状态生成下一个数据。为了达到记录当前状态,并配合next()函数进行迭代使用,我们可以采用更简便的语法,即生成器(generator)。 生成器是一类特殊的迭代器。 2. 创建生成器方法1 要创建一个生成器,有很多种方法。第一种方法很简单,只要把一个列表生成式的 [ ] 改成 ( ) 3. 创建生成器方法2 generator非常强大。如果推算的算法比较复杂,用类似列表生成式的 for 循环无法实现的时候,还可以用函数来实现。 在使用生成器实现的方式中,我们将原本在迭代器__next__方法中实现的基本逻辑放到一个函数中来实现,但是将每次迭代返回数值的return换成了yield,此时新定义的函数便不再是函数,而是一个生成器了。 简单来说:只要在def中有yield关键字的 就称为 生成器 此时按照调用函数的方式使用生成器就不再是执行函数体了,而是会返回一个生成器对象,然后就可以按照使用迭代器的方式来使用生成器了 总结 使用了yield关键字的函数不再是函数,而是生成器。(使用了yield的函数就是生成器) yield关键字有两点作用: 保存当前运行状态(断点),然后暂停执行,即将生成器(函数)挂起

Oracle数据库学习(一):虚拟机下Oracle Linux的安装与配置

*爱你&永不变心* 提交于 2020-12-30 04:07:51
这篇博文主要以图片的形式讲述Oracle Linux在虚拟机下的安装与配置 一、前期虚拟机安装ISO文件的配置 1、创建新的虚拟机 2、选择“自定义(高级)”选项,下一步,默认“虚拟机硬件兼容性”或选择低版本,下一步。 3、选择“安装程序光盘映像文件(iso)(M):”,浏览选择镜像文件后下一步;输入虚拟机名字和虚拟机存放位置,下一步。 4、根据自己机器的配置选择处理器配置和内存配置。 5、选择“使用网络地址转换(NAT)(E)”,下一步,选择“LSI Logic(L)”,下一步 6、选择“SCSI(S)”选项,下一步,选择“创建新虚拟磁盘(V)”,下一步。 7、设置最大磁盘大小为40.0G,将虚拟磁盘存储为单个文件,下一步,默认设置,下一步。 8、完成配置,进行安装。 二、Oracle Linux的安装 1、选择第一项“Install or upgrade an existing system”。 2、选择“skip”跳过,选择“NEXT”下一步。 3、两个界面内都选择“English”,然后进行“NEXT”。 4、先选择“Basic Storage Devices”,选择“Next”后,选择“Yes,discard any data”。 5、修改Hostname,此处修改为“ambition”,然后配置网络“Configure Network”。网络配置信息,选择网卡“eth0

HashMap扩容死循环问题

谁说我不能喝 提交于 2020-12-29 18:40:30
原文: https://blog.csdn.net/Leon_cx/article/details/81911223 下面我们来模拟一下多线程场景下扩容会出现的问题: 假设在扩容过程中旧hash桶中有一个单链表,单链表中只有一个节点A,也就是e引用的对象。新hash桶中有一个单链表,单链表中的节点是B->C,也就是newTable[i]引用的对象。 单线程扩容 如果只有一个线程在执行扩容: - 执行到第 3 行next = e.next的时候next == null - 从第 5 行到第 9 行会将A节点按照头插法插入到newTable[i]所引用的单链表中,此时newTable[i]所引用的单链表中的节点是A->B->C - 第 11 行e = next会将next赋值给e,所以e == null - 这时候循环就结束了,整个扩容过程中毫无问题 多线程扩容 如果是多个线程同时在扩容,我们以T1线程的扩容过程为主视角,T2和T3线程只是会在T1线程扩容过程中捣乱的: - T1线程执行到第 7 行e.next = newTable[i]的时候会使得 e.next == B - 此时T2线程过来捣乱了,执行到第 3 行next = e.next,那么会使得next == B,此时T2线程的使命结束了,下面不去考虑T2线程了 - T1线程执行到第 9 行newTable[i] =