We read every piece of feedback, and take your input very seriously.
To see all available qualifiers, see our documentation.
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
No response
Pika处理单个客户端请求流程: 1.WorkerThread负责处理客户端请求。客户端往pika写数据,触发读事件。 当read_status为kReadAll,则一次完整的请求被读取,会先把这个请求fd的读写事件给删除: 2.请求会交由工作线程池ThreadPool处理,处理完后。调用TryWriteResp:设置reply;同时调用NotifyEpoll(true):设置状态为kNotiEpolloutAndEpollin ,通知WorkerThread处理该状态。 3.WorkerThread此时将该请求fd的读写事件重新注册,此时处理客户端的返回/读取下一条命令。 在一次命令读取结束后,把连接fd的读写事件从epoll里面删除了。命令处理结束后又把读写事件加回来了。 因为pika用的是异步处理,一个连接的命令是异步地交给线程池处理,如果同个连接发了2个命令,因为是异步处理,没有办法保证2个命令满足FIFO,即先来的命令需要先回复,后来的命令后回复。pika是多线程异步处理,所以这里在读取了第一个命令后,把连接的读写事件删除了,等前一个命令处理完了才加回来,读取第二个命令来处理。 更详细的流程见:https://www.cnblogs.com/sigma0-/p/12828226.html
性能提升验证:不删除读写事件,验证性能是否提升。 优化:设置一个队列,对同一个客户端请求编号,发送异步并发请求。将请求流程异步化。
暂无
The text was updated successfully, but these errors were encountered:
No branches or pull requests
Which PikiwiDB functionalities are relevant/related to the feature request?
No response
Description
Pika处理单个客户端请求流程:
![截屏2024-06-13 15 20 22](https://private-user-images.githubusercontent.com/156997066/339260350-260352b5-d8fd-4020-a812-77777870fb5e.png?jwt=eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJpc3MiOiJnaXRodWIuY29tIiwiYXVkIjoicmF3LmdpdGh1YnVzZXJjb250ZW50LmNvbSIsImtleSI6ImtleTUiLCJleHAiOjE3MzkwMTk4MjAsIm5iZiI6MTczOTAxOTUyMCwicGF0aCI6Ii8xNTY5OTcwNjYvMzM5MjYwMzUwLTI2MDM1MmI1LWQ4ZmQtNDAyMC1hODEyLTc3Nzc3ODcwZmI1ZS5wbmc_WC1BbXotQWxnb3JpdGhtPUFXUzQtSE1BQy1TSEEyNTYmWC1BbXotQ3JlZGVudGlhbD1BS0lBVkNPRFlMU0E1M1BRSzRaQSUyRjIwMjUwMjA4JTJGdXMtZWFzdC0xJTJGczMlMkZhd3M0X3JlcXVlc3QmWC1BbXotRGF0ZT0yMDI1MDIwOFQxMjU4NDBaJlgtQW16LUV4cGlyZXM9MzAwJlgtQW16LVNpZ25hdHVyZT1kMjkxMGJkMmVmNTlhMWM3ZjFiZjVkMjkwYmE3MDQ3ODhkOWNlM2NlNmYyZTMyYjhmYWE0ZmJmZmNkOTY5MDkxJlgtQW16LVNpZ25lZEhlYWRlcnM9aG9zdCJ9.jqY-gUEVdzDCMNt5iwDH7maBro1DOtAVv407ac7xLx0)
![截屏2024-06-13 15 44 04](https://private-user-images.githubusercontent.com/156997066/339266996-e0ad3309-c8ab-41cf-b517-de7cf40d1419.png?jwt=eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJpc3MiOiJnaXRodWIuY29tIiwiYXVkIjoicmF3LmdpdGh1YnVzZXJjb250ZW50LmNvbSIsImtleSI6ImtleTUiLCJleHAiOjE3MzkwMTk4MjAsIm5iZiI6MTczOTAxOTUyMCwicGF0aCI6Ii8xNTY5OTcwNjYvMzM5MjY2OTk2LWUwYWQzMzA5LWM4YWItNDFjZi1iNTE3LWRlN2NmNDBkMTQxOS5wbmc_WC1BbXotQWxnb3JpdGhtPUFXUzQtSE1BQy1TSEEyNTYmWC1BbXotQ3JlZGVudGlhbD1BS0lBVkNPRFlMU0E1M1BRSzRaQSUyRjIwMjUwMjA4JTJGdXMtZWFzdC0xJTJGczMlMkZhd3M0X3JlcXVlc3QmWC1BbXotRGF0ZT0yMDI1MDIwOFQxMjU4NDBaJlgtQW16LUV4cGlyZXM9MzAwJlgtQW16LVNpZ25hdHVyZT1iNGI1NTg4OGViOTMzOWUzN2M0YmM3MzEzMDM1NjJmZTM5ZmIyOGQyN2YwMGIyZGUzZGViMDU1NzVmOWNmM2I5JlgtQW16LVNpZ25lZEhlYWRlcnM9aG9zdCJ9.0zrSPw1g9xsM6104gPaI6WR8D_NrVnbmtkzLTriVEvE)
![截屏2024-06-13 15 41 02](https://private-user-images.githubusercontent.com/156997066/339265931-d23924d5-2101-4c99-be65-82df89562ef7.png?jwt=eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJpc3MiOiJnaXRodWIuY29tIiwiYXVkIjoicmF3LmdpdGh1YnVzZXJjb250ZW50LmNvbSIsImtleSI6ImtleTUiLCJleHAiOjE3MzkwMTk4MjAsIm5iZiI6MTczOTAxOTUyMCwicGF0aCI6Ii8xNTY5OTcwNjYvMzM5MjY1OTMxLWQyMzkyNGQ1LTIxMDEtNGM5OS1iZTY1LTgyZGY4OTU2MmVmNy5wbmc_WC1BbXotQWxnb3JpdGhtPUFXUzQtSE1BQy1TSEEyNTYmWC1BbXotQ3JlZGVudGlhbD1BS0lBVkNPRFlMU0E1M1BRSzRaQSUyRjIwMjUwMjA4JTJGdXMtZWFzdC0xJTJGczMlMkZhd3M0X3JlcXVlc3QmWC1BbXotRGF0ZT0yMDI1MDIwOFQxMjU4NDBaJlgtQW16LUV4cGlyZXM9MzAwJlgtQW16LVNpZ25hdHVyZT1hZjk0MjYyYmNlNGI2YWZhYjIzMjM4NDQ4YTY3YzM0MDA0ZjE4MDJjYjAyYWI4OGMyODk5MTY1YzAyYmY3MDEyJlgtQW16LVNpZ25lZEhlYWRlcnM9aG9zdCJ9.KbdJqaLPYvkRluY6hjPiXQ7C9u2cIgGNM5GyppzbuXc)
![截屏2024-06-13 15 41 02](https://private-user-images.githubusercontent.com/156997066/339270113-fae28235-92a0-4d01-aee0-33b8456a589e.png?jwt=eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJpc3MiOiJnaXRodWIuY29tIiwiYXVkIjoicmF3LmdpdGh1YnVzZXJjb250ZW50LmNvbSIsImtleSI6ImtleTUiLCJleHAiOjE3MzkwMTk4MjAsIm5iZiI6MTczOTAxOTUyMCwicGF0aCI6Ii8xNTY5OTcwNjYvMzM5MjcwMTEzLWZhZTI4MjM1LTkyYTAtNGQwMS1hZWUwLTMzYjg0NTZhNTg5ZS5wbmc_WC1BbXotQWxnb3JpdGhtPUFXUzQtSE1BQy1TSEEyNTYmWC1BbXotQ3JlZGVudGlhbD1BS0lBVkNPRFlMU0E1M1BRSzRaQSUyRjIwMjUwMjA4JTJGdXMtZWFzdC0xJTJGczMlMkZhd3M0X3JlcXVlc3QmWC1BbXotRGF0ZT0yMDI1MDIwOFQxMjU4NDBaJlgtQW16LUV4cGlyZXM9MzAwJlgtQW16LVNpZ25hdHVyZT1jYjQ1MDY4ZWVkOGNkODg1OGZiODIzN2YyNmRjNmVkZjZjMGQwMGJlZWM1YWRjMjU0ZjUyYTVjYzg4MzZhMjExJlgtQW16LVNpZ25lZEhlYWRlcnM9aG9zdCJ9.l1WSQFbpL3CHmiBgdtfAoqf_i97YDUmzPpyG1hguh-k)
1.WorkerThread负责处理客户端请求。客户端往pika写数据,触发读事件。
当read_status为kReadAll,则一次完整的请求被读取,会先把这个请求fd的读写事件给删除:
2.请求会交由工作线程池ThreadPool处理,处理完后。调用TryWriteResp:设置reply;同时调用NotifyEpoll(true):设置状态为kNotiEpolloutAndEpollin ,通知WorkerThread处理该状态。
3.WorkerThread此时将该请求fd的读写事件重新注册,此时处理客户端的返回/读取下一条命令。
在一次命令读取结束后,把连接fd的读写事件从epoll里面删除了。命令处理结束后又把读写事件加回来了。
因为pika用的是异步处理,一个连接的命令是异步地交给线程池处理,如果同个连接发了2个命令,因为是异步处理,没有办法保证2个命令满足FIFO,即先来的命令需要先回复,后来的命令后回复。pika是多线程异步处理,所以这里在读取了第一个命令后,把连接的读写事件删除了,等前一个命令处理完了才加回来,读取第二个命令来处理。
更详细的流程见:https://www.cnblogs.com/sigma0-/p/12828226.html
Proposed solution
性能提升验证:不删除读写事件,验证性能是否提升。
优化:设置一个队列,对同一个客户端请求编号,发送异步并发请求。将请求流程异步化。
Alternatives considered
暂无
The text was updated successfully, but these errors were encountered: