AsyncSlimefun4 _ 高性能 异步化的Slimefun4分支 - 服务端插件 - Minecraft(我的世界)中文论坛 -【】mcbbs5.3】.html

AsyncSlimefun4 | 高性能 异步化的Slimefun4分支 - 服务端插件 - Minecraft(我的世界)中文论坛 -

Minecraft(我的世界)中文论坛

 找回密码
 注册(register)

!header_login!

只需一步,立刻登录

查看: 877|回复: 20
打印 上一主题 下一主题

[重制插件] AsyncSlimefun4 | 高性能 异步化的Slimefun4分支

[复制链接]
小张up 当前离线
积分
5002
帖子
主题
精华
贡献
爱心
钻石
人气
下界之星
最后登录
1970-1-1
注册时间
2018-5-30
查看详细资料

来自:湖北

跳转到指定楼层
楼主
发表于 2022-7-22 11:22:57 | 只看该作者 |只看大图 回帖奖励 |倒序浏览 |阅读模式
服务端插件
英文名称:AsyncSlimefun4
中文名称:AsyncSlimefun4
插件来源:重制
适用服务端:CraftBukkit 
插件类型:娱乐 
语言支持:简体中文 
适用版本:1.19.X 1.18.X 1.17.X 1.16.X 1.15.X 1.14.X 1.13.X 
前置Mod|插件:无前置插件
下载地址:https://github.com/HAPPYLAND-Dev/Slimefun4/actions
原帖地址:https://github.com/HAPPYLAND-Dev/Slimefun4
插件Logo:
插件简介:异步化处理,大幅提升整体性能

您尚未登录,立即登录享受更好的浏览体验!

您需要 登录 才可以下载或查看,没有帐号?注册(register)

x
本帖最后由 小张up 于 2022-10-11 16:02 编辑
货运的异步在最新版被取消,其他功能无改变,原因请查阅置顶楼层
交流探讨? 加入我们的QQ群 423179929


感谢上游对SF提供的汉化,原帖地址:
https://www.mcbbs.net/thread-827594-1-1.html


此处下载:
https://github.com/HAPPYLAND-Dev/Slimefun4/actions


请勿使用



评分

参与人数 4人气 +5金粒 +40收起 理由
Ashidamana+ 2+ 40冲冲冲!!!!
Radiation_pi+ 1MCBBS有你更精彩~
13681576362+ 110
mzmzmz+ 1+1

查看全部评分

帖子永久链接: 

Minecraft中文论坛 - 论坛版权1、本主题所有言论和图片纯属会员个人意见,与本论坛立场无关
2、本站所有主题由该帖子作者发表,该帖子作者享有帖子相关版权
3、其他单位或个人使用、转载或引用本文时必须同时征得该帖子作者的同意
4、帖子作者须承担一切因本文发表而直接或间接导致的民事或刑事法律责任
5、本帖若有内容转载自其它媒体,不代表本站赞同其观点和对其真实性负责
6、若本帖涉及任何版权问题,请立即告知本站,本站将及时予以删除并致以最深的歉意
7、Minecraft(我的世界)中文论坛管理员和版主有权不事先通知发贴者而删除本文

Thehrz 当前离线
积分
6487
帖子
主题
精华
贡献
爱心
钻石
人气
下界之星
最后登录
1970-1-1
注册时间
2020-11-1
查看详细资料

来自:安徽

来自 8#
发表于 2022-7-22 13:58:48 | 只看该作者
强烈不建议使用此Fork

Slimefun货运系统在达到一定规模时 由于反复从容器遍历物品 造成性能滞后

而之所以它需要反复从容器遍历物品 是因为Bukkit 并没有 InventoryItemAddEvent 即物品被添加到一个Inventory的事件

这就导致Slimefun需要每隔一段时间从容器遍历物品 判断被货运节点连接的容器内有没有符合要求的物品 若有这个物品 那就将这个物品放到另一个被货运节点连接的容器 而一个原版大箱子为54格  假设另一个箱子也是54格 那它最多要遍历108次 这只是二个输出输入货运节点+两个大箱子 最大要遍历108次

而一个货运系统 不可能只有一个节点 它还要先遍历货运节点连接的箱子

基于此 货运系统时间复杂度 应为 O(n) 级 但是由于容器最大格的存在 其常数是很大的 不可忽略

从容器遍历物品这个操作必须在主线程进行

我看到了你的代码

你将CargoNetworkTask整个变为异步执行


而CargoUtils那些的 insert withdraw 的方法

还是同步执行

但是 insert withdraw 就是整个货运系统最慢的地方啊

所以你整个异步执行又有什么用? 虽然我暂时没有看出有线程不安全的地方 但是存在这种风险是潜在的

而上面说到 货运系统的性能滞后是因为规模大 而规模大的情况下 反复向Bukkit的任务调度器推任务 这反而会造成性能损失

如果单靠你改个异步执行就能优化Slimefun货运系统 那早就这么做了

依我看 优化Slimefun货运系统 就是BukkitAPI 添加 InventoryItemAddEvent 这样就免去每隔一段时间遍历 但现阶段是没有的

综上 我认为你这个Fork 完全没有意义 徒增风险 如果你将这个Fork PR 到Slimefun 主分支 我相信会被那些老外直接Close

评分

参与人数 2人气 +4金粒 +24收起 理由
苏狐awa+ 2MCBBS有你更NB~
小张up+ 2+ 24MCBBS有你更精彩~

查看全部评分

回复

使用道具 举报

ZeroRev_ 当前离线
积分
1665
帖子
主题
精华
贡献
爱心
钻石
人气
下界之星
最后登录
1970-1-1
注册时间
2017-2-16
查看详细资料

来自:河北

沙发
发表于 2022-7-22 11:39:08 | 只看该作者
不错的插件
回复

使用道具 举报

全球4169 当前离线
积分
3
帖子
主题
精华
贡献
爱心
钻石
人气
下界之星
最后登录
1970-1-1
注册时间
2021-1-10
查看详细资料

来自:广东

板凳
发表于 2022-7-22 11:51:58 | 只看该作者
真不错,有救了
回复

使用道具 举报

超帅大帅 当前离线
积分
94
帖子
主题
精华
贡献
爱心
钻石
人气
下界之星
最后登录
1970-1-1
注册时间
2022-1-10
查看详细资料

来自:江苏

地板
发表于 2022-7-22 12:28:42 | 只看该作者
MCBBS有你更精彩
回复

使用道具 举报

pXiaoD 当前离线
积分
9548
帖子
主题
精华
贡献
爱心
钻石
人气
下界之星
最后登录
1970-1-1
注册时间
2014-7-30
查看详细资料

来自:江苏

5#
发表于 2022-7-22 12:32:15 | 只看该作者
我觉得支持 SuperiorSkyblock 比支持 IridiumSkyblock 吸引力更大。
回复

使用道具 举报

皓浩 当前离线
积分
1228
帖子
主题
精华
贡献
爱心
钻石
人气
下界之星
最后登录
1970-1-1
注册时间
2020-3-4
查看详细资料
头像被屏蔽

来自:浙江

6#
发表于 2022-7-22 12:40:21 | 只看该作者
粘液科技必备插件,正在用很不错
回复

使用道具 举报

皓浩 当前离线
积分
1228
帖子
主题
精华
贡献
爱心
钻石
人气
下界之星
最后登录
1970-1-1
注册时间
2020-3-4
查看详细资料
头像被屏蔽

来自:浙江

7#
发表于 2022-7-22 12:40:43 | 只看该作者
希望作者大大持续更新
回复

使用道具 举报

小张up 当前离线
积分
5002
帖子
主题
精华
贡献
爱心
钻石
人气
下界之星
最后登录
1970-1-1
注册时间
2018-5-30
查看详细资料

来自:湖北

9#
 楼主| 发表于 2022-7-22 15:45:29 | 只看该作者
本帖最后由 小张up 于 2022-7-22 15:58 编辑
Thehrz 发表于 2022-7-22 13:58
强烈不建议使用此Fork

Slimefun货运系统在达到一定规模时 由于反复从容器遍历物品 造成性能滞后

对于原版容器的异步确实不能异步,转到主线程执行是必须的,也必然会增加占用。
但是,您能否思考如下的一些问题:1.粘液科技的自动化,几乎完全依赖所有的机器,而不是原版的箱子
2.粘液科技的附属的那些储存桶,是可以异步访问的

我在我的服务器做了大量的测试和查看玩家的自动化设计,整个线只有1-2个原版容器,故因此我认为在访问原版储存时同步不会占用大量性能,于此同时异步所有机器的存取,绝对可以提高性能。

线程安全有问题,5分钟前我修复了
争议就在于货运访问原版库存,确实如果大量依赖原版的库存的话,占用不降反增,我稍后会在贴内着重提醒这一点帮助一些服主避雷

感谢您的提醒,能加我的QQ让我们来一同探讨吗?3296517911

回复

使用道具 举报

小张up 当前离线
积分
5002
帖子
主题
精华
贡献
爱心
钻石
人气
下界之星
最后登录
1970-1-1
注册时间
2018-5-30
查看详细资料

来自:湖北

10#
 楼主| 发表于 2022-7-22 15:50:44 | 只看该作者
pXiaoD 发表于 2022-7-22 12:32
我觉得支持 SuperiorSkyblock 比支持 IridiumSkyblock 吸引力更大。

好提议,有空就去做
主要是没有现成的测试服务器能用emm
回复

使用道具 举报

Thehrz 当前离线
积分
6487
帖子
主题
精华
贡献
爱心
钻石
人气
下界之星
最后登录
1970-1-1
注册时间
2020-11-1
查看详细资料

来自:安徽

11#
发表于 2022-7-22 16:38:32 | 只看该作者
小张up 发表于 2022-7-22 15:45
对于原版容器的异步确实不能异步,转到主线程执行是必须的,也必然会增加占用。
但是,您能否思考如下的一 ...

我不了解Slimefun附属

你重置的是Slimefun 你不能控制用户用不用附属插件

因此这个问题不应该交流关于附属插件

你可以先看一下ChestMenu类 (Slimefun 机器Menu实现)

这个类本质是Bukkit API Inventory 封装

Inventory 类不能用异步访问 而且 他维护的items List 的实现也仅仅是ArrayList 是线程不安全List实现

请问你是怎么得出机器容器是可以异步访问的
回复

使用道具 举报

小张up 当前离线
积分
5002
帖子
主题
精华
贡献
爱心
钻石
人气
下界之星
最后登录
1970-1-1
注册时间
2018-5-30
查看详细资料

来自:湖北

12#
 楼主| 发表于 2022-7-22 17:02:20 | 只看该作者
本帖最后由 小张up 于 2022-7-22 17:08 编辑
Thehrz 发表于 2022-7-22 16:38
我不了解Slimefun附属

你重置的是Slimefun 你不能控制用户用不用附属插件

按照你的逻辑,货运是打开机器页面模拟玩家操作不成?

仅仅为原版容器,才会切到主线程执行
回复

使用道具 举报

Thehrz 当前离线
积分
6487
帖子
主题
精华
贡献
爱心
钻石
人气
下界之星
最后登录
1970-1-1
注册时间
2020-11-1
查看详细资料

来自:安徽

13#
发表于 2022-7-22 17:11:35 | 只看该作者
小张up 发表于 2022-7-22 17:02
按照你的逻辑,货运是打开机器页面模拟玩家操作不成?

我并没有告诉你Slimefun进行过这种操作

Inventory 是线程不安全类 或者说carftbukkit包下的类都是线程不安全类

这些类没有任何锁、同步机制 因此造成了线程不安全

为什么你理解成要"模拟玩家"操作 Inventory ?

评分

参与人数 1人气 +1收起 理由
小张up+ 1帖子顶上我加了行红字

查看全部评分

回复

使用道具 举报

小张up 当前离线
积分
5002
帖子
主题
精华
贡献
爱心
钻石
人气
下界之星
最后登录
1970-1-1
注册时间
2018-5-30
查看详细资料

来自:湖北

14#
 楼主| 发表于 2022-7-22 17:13:46 | 只看该作者
Thehrz 发表于 2022-7-22 17:11
我并没有告诉你Slimefun进行过这种操作

Inventory 是线程不安全类 或者说carftbukkit包下的类都是线程不 ...

我当然知道,但你说的
反复向Bukkit的任务调度器推任务

是什么意识
回复

使用道具 举报

蟹蒙老鸽 当前离线
积分
5511
帖子
主题
精华
贡献
爱心
钻石
人气
下界之星
最后登录
1970-1-1
注册时间
2020-1-26
查看详细资料

来自:四川

15#
发表于 2022-7-22 17:17:35 | 只看该作者
本帖最后由 蟹蒙老鸽 于 2022-7-22 17:31 编辑

厉害,能有想法去实践已经是难得可贵的了。其实推荐既然你要做独立出去的一个粘液分支:
1. 可以把粘液机器变原版化问题也一并解决,对于粘液原版化只需要把机器底子改成容器方块可以大大降低变原版可能性(我服务器测试这样做了后玩家几乎没有出现机器变原版的问题了

2. 可以尝试把Mysql融合到粘液里面去,我记得有一个开源附属做到了
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 注册(register)

本版积分规则

Archiver|小黑屋|Mcbbs.net ( 京ICP备15023768号-1 ) | 京公网安备 11010502037624号 | 手机版

GMT+8, 2022-10-15 12:30 , Processed in 0.950205 second(s), Total 32, Slave 31 queries, Release: Build.2022.10.14 1014, Gzip On, Redis On.

"Minecraft"以及"我的世界"为美国微软公司的商标 本站与微软公司没有从属关系

© 2010-2022 我的世界中文论坛 版权所有 本站内原创内容版权属于其原创作者,除作者或版规特别声明外未经许可不得转载