大家好~我来自湖南长沙铁道学院的一名大二学生。我通过一个学长有幸得知了阿里的学生专属的飞天加速计划活动,第一次测试开通非常开心和窃喜第一次体验拥有服务器的初感。因为当时想着使用的时间比较短浅,我当时处于学习课程阶段是偏桌面应用这块的内容。而且当时很多身边同学很多人同学都在研究qq、wx群聊自动回复功能的机器人,当时本来想用java来事项这块的,当时在汇编这块比较快应用且市场使用还是属易语言比较多,为了遇到问题能够百度上查询到,还是选择使用了易语言。
一、初次认知服务器技术概念混淆
1. ECS是有适用范围的它不是通用框架,如果把引擎所有逻辑都用ECS处理是错误的,他应该是可选的工具而不是侵入式的框架。
关于ECS的适用范围其实就在它的优点里,既是:"大部分情况下通过列表顺序方式遍历的依赖其他计算结果较少可以起线程的场景"。
得是列表方式遍历不然用列表方式模拟其他数据结构的遍历开销反而更大,例如树,图之类的数据结构。而且从逻辑上会非常别扭(见过用ECS方式模拟树的情况简直太难用了)。
再说GC,这又是个很特化的问题这里是说减少了GC压力,但是问题是cpp他就没有GC,这里是说cpp嵌入mono的情况事实上是减轻了mono的GC。所以必须是能精确操作内存的底层语言+有GC的上层语言才构成这种情况。假如只在Rust里根本不存在减轻GC的说法,Rust社区这么喜欢ECS的一个原因是这样可以简化生命周期的问题。
再说多线程,并不是所有情况都适合多线程,他必须是比较独立的不依赖于外部计算结果不和外部耦合的情况才适合起线程处理。例如说寻路,物理之类的纯计算,AI决策之类的。当然AI决策能不能多线程处理还要看具体实现,这里可以说AI决策可以改造成多线程处理做了这方面的功夫所以提高了性能,前提还是AI决策适合用多线程的方式优化。而不适合多线程优化的领域是不能硬套的。
ECS的多线程采用的是fork/join模式,假如说每一帧都有很多任务通过System把他们拆分成了不同的子任务,System之间可以指定依赖例如必须先算完任务A才能再算任务B,没有依赖的任务之间是并发处理的最后等待最慢的那个子任务完成算一帧。这里的问题就是只有在大部分都是并发处理的情况下才有意义,如果子任务全都是逐个依赖那性能反而比单线程更菜。
2.多线程无法精确操作内存
这个就不用多说了,在脚本语言里完全体现不出ECS的任何优点。反而起手先给自己上个脚拷(ECS的规则)。除非你把脚本语言的table编译成cpp的struct并且cpp那边起线程来调度System,不然完全没意义。
有些观点认为使用ECS提升了代码的抽象度,我也是挺无语的。说一个原则吧,对于领域问题应当设计出完全贴合领域问题的描述,其他的任何无关的逻辑概念都是噪音。
3、模拟树形数据结构
因为回复机器人模拟数据结构太常用了,有些情况可以把逻辑拍平处理,有些问题他本身就是个树,例如UI。UI的逻辑要频繁的访问树的父节点子节点遍历来遍历去,拿ECS模拟的树完全是在帮倒忙。UI真的适合基于继承的对象树,最近批判面向对象真的有些矫枉过正了,函数式因为其不可变特性的确很适合并发但是在UI领域真的只是个没入场的水平,毕竟面向对象初期就是为UI设计的。
二、本地连不上阿里云的mysql_细数本地连阿里云上mysql8遇到的坑
wget,yum命令一敲mysql8顺利安装的...
接下来就是修改密码了,思路大概就是在my.cnf(一般在/etc下)添加skip-grant-tables免密登录,然后重启mysql,然后再输入mysql -u root -p命
令按两次回车直接进mysql了;这里我遇到了第一个坑,脑残的我把skip-grant-tables加到my.cnf的注释里了,然后怎么也跳不过去,真是自作自受了;
上面的步骤都成功了以后,可以输入select host, user, authentication_string, plugin from mysql.user;查看mysq自带的用户表,其中host表示允许用户登录的 ip,% 表示可以远程;user和authentication_string分别表示用户名和密码,plugin表示加密方式;我们可以将root的默认密码滞空,update mysql.user set authentication_string='' where user='root'; 然后通过exit退出mysql命令行,接着去把刚开始在my.cnf加的skip-grant-tables给注释掉,重启mysql
接着用mysql -u root -p登录,遇到输入密码直接回车,因为刚已经把密码滞空了;进入mysql命令行以后使用ALTER user 'root'@'localhost' IDENTIFIED BY '新密码';设置新密码,需要注意的是设置的新密码默认是有复杂度校验的
如果不想校验可以输入set global validate_password.policy=0;执行成功就可以输入简单的密码了
再次致谢飞天加速计划活动,通过“高校学生在家实践”里的首次体验云服务使用感受。在这个使用的过程中我虽然比在学校机课实践某些操作中有些坎坎坷坷,但是原来原理都是大同小异的。希望后面能够熟练之后不会再这么马虎了,能够更加顺畅的使用和搭建。虽然机器人回复应用功能简单,但是通过自己的实操去实现出来非常的又成就感。感谢ecs!感谢阿里!