Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

单任务线程数的问题…… #196

Closed
sroon opened this issue Jun 21, 2019 · 7 comments
Closed

单任务线程数的问题…… #196

sroon opened this issue Jun 21, 2019 · 7 comments

Comments

@sroon
Copy link

sroon commented Jun 21, 2019

115单个任务的下载链接最多支持2个线程。

经过测试,发现如果aria2的 单任务连接数参数 (--split)设置得比2高,在下载到10%-12%左右,115服务器会强制关闭多线程下载,也就是说之后只能用单线程下载文件。
我这里的测试速度是,单线程的下载速度稳定在10MiB/s左右,两个线程稳定在17-18MiB/s左右。

aria2的 --split 参数是这样运行的:
如果没有设置 --split 参数,默认值是5
如果在启动时读取了配置文件,把配置文件中的值作为默认值
如果在用RPC添加下载链接时指定了 --split 参数,把RPC数据中的值作为默认值

所以希望在源码中指定 split 参数为2
经过测试,只要115下载链接的split参数为2,就可以稳定地以2个线程下载完文件,也就是说115服务器不会在下载进行到10%-12%以后强制限制连接数为1

因为我的aria2不只下载115的文件,还要下载其他文件,例如百度……
所以不能在aria2的配置文件中把split参数设置为2

总的来说,在源码中指定split参数为2是最好的选择

我把源码简单改了一下就可以了
params: [ [file.link],{ out: file.name, header: file.getHeader(), split: "2" } ]

@acgotaku
Copy link
Owner

http://localhost:6800/jsonrpc#split=2
你本来就可以在 RPC设置 这个参数的

@sroon
Copy link
Author

sroon commented Jun 23, 2019

split 参数分为 全局参数 和 单任务参数

split全局参数
可以不设置(默认值是5)
可以在启动时指定(通过命令行指定,或者在配置文件中指定)
可以在启动后通过RPC修改 (http://localhost:6800/jsonrpc#split=2)

而单任务参数的优先级是高于全局参数的
也就是说在通过添加下载任务时指定split参数会覆盖全局参数,只对添加的任务有效

如果指定全局参数是2(不管是启动时指定还是启动后通过RPC修改),那只下载115文件是没有问题的
问题是下载其它地址的文件split参数也会变成2
而我在下载其他文件(比如说百度的文件)时可能需要16个线程,甚至128个线程

如果同时满足下载115文件用两个线程,下载其他文件用更多的线程,有以下三种办法

1
下载115文件前通过RPC指定split参数为2
下载其它文件前再把split参数指定为16,或者更高值

2
同时启动两个 aria2 实例
一个只下载115文件,指定split参数值为2
一个下载其它文件,指定split参数值为16,或者更高值

3
指定split参数的全局变量为16
在通过RPC添加115下载链接时指定split参数为2

第一种方法过于繁琐,意味着每次下载不同地址文件时都要用RPC修改一次参数
第二种方法会造成计算机资源的浪费(虽然不是很多)
只有第三种方法应该是最完美的方法

所以我认为在源码中指定split参数是最合理的方式

@acgotaku
Copy link
Owner

在RPC PATH里面添加 和在源码里面 添加是一个效果

你是不是理解有什么错误?

@acgotaku
Copy link
Owner

      const rpcOption = rpcData.params[1]
      if (options) {
        for (let key in options) {
          rpcOption[key] = options[key]
        }
      }

@acgotaku
Copy link
Owner

https://github.com/acgotaku/115/blob/master/src/js/lib/core.js#L176

@sroon
Copy link
Author

sroon commented Jun 23, 2019

好吧,看来是我理解错误了……
惭愧了……

@sroon sroon closed this as completed Jun 23, 2019
@snowman
Copy link
Contributor

snowman commented Aug 10, 2021

#232 (comment)

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
None yet
Projects
None yet
Development

No branches or pull requests

3 participants