-
Notifications
You must be signed in to change notification settings - Fork 4k
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
Support start KeepWrite bthread urgent #2591
base: master
Are you sure you want to change the base?
Conversation
@wasphin 有空帮忙看看protobuf22缺失absl_flag库的问题 |
absl 4038192a57cb75f7ee671f81a3378ff4c74c4f8e 中删除了 flags 库,当前使用的最新的 absl 20240116.1 没有 flags 库了,我看下怎么识别下依赖 |
另外最新版的 protobuf(26.1)又改接口了,目前测 protobuf 22+ ci 安装的最新版的 protobuf,应该不久又会有问题🤦 |
33d7312
to
7eda400
Compare
这个优化会有实际效果吗,如果启动了KeepWrite线程,说明之前的write已经写不进去了,这时再立即KeepWrite,是不是也会写不进去,最终还是要等待epollout |
不一定是写不进去。大多数情况应该是StartWrite写完队头数据,但是队列里还有还有其他数据,所以启动协程KeepWrite。 不过 #2588 在压力比较大的时候,整体服务能力都下降了。只优化少数连接上的rpc回包延迟,优化应该有限吧。 |
7eda400
to
b88d1d3
Compare
@wasphin 果然,又有问题了 |
晚些我再下载个老版本 prootbuf.rb 吧,另外得看看后面 protobuf 怎么支持更新 |
b88d1d3
to
dfd1add
Compare
那如果是只写了一个req,队列里面还有其它数据,这种情况要是优化,可以让StartWrite去再取后边的请求,也不用再专门启动一个bthread吧。 |
不可行吧。调用方的预期是写完自己的req就得返回了,后续还有其他逻辑执行。 |
上面有个_write_head.exchange,这块如果fd有写的话,这个请求就挂到链表里面就返回了,下面的判断逻辑就不生效了吧?这块怎么理解呢?有时候起作用,有时候不起作用吗? |
我理解是要么同步写自己的req,要么异步写。 |
那即使加这个start_urgent,也可能是异步写对吧?因为可能走不到这个分支就提前return了。 |
是的 |
那如果走到了下面的分支,说明本请求所在的线程获得了写的权限,它会把自己的请求写完,即使不启动start_urgent,启动start_urgent的目的是为了让后续的请求更及时的写到socket? |
期望是这样的,但是没测过效果。 |
What problem does this PR solve?
Issue Number: resolve #2588
Problem Summary:
What is changed and the side effects?
Changed:
Side effects:
Performance effects(性能影响):
Breaking backward compatibility(向后兼容性):
Check List: