Experimental: uses ktor to perform HTTP calls #935
Add this suggestion to a batch that can be applied as a single commit.
This suggestion is invalid because no changes were made to the code.
Suggestions cannot be applied while the pull request is closed.
Suggestions cannot be applied while viewing a subset of changes.
Only one suggestion per line can be applied in a batch.
Add this suggestion to a batch that can be applied as a single commit.
Applying suggestions on deleted lines is not supported.
You must change the existing code in this line in order to create a valid suggestion.
Outdated suggestions cannot be applied.
This suggestion has been applied or marked resolved.
Suggestions cannot be applied from pending reviews.
Suggestions cannot be applied on multi-line comments.
Suggestions cannot be applied while the pull request is queued to merge.
Suggestion cannot be applied right now. Please check back later.
This is an experimental PR that tries to replace okhttp with ktor as our main http library.
This is due to the thread model used in okhttp isn't scalable: it's a blocking thread based model. This means that if you happen to have 100 groups you'll likely end up with 100 threads while they are all polling at the same time. If you limit the thread number, all threads will be blocked busy waiting for the http polling and leave no rooms for other operations.
In contrast, ktor/cio uses a selector model which can scale up network concurrency almost limitedlessly(* still subjects to system resources but no threads are created as the number of connection increases).
This PR is here so that people can try out if it makes any significant performance improvement, particularly when you have large number of groups (for a small number of groups it's expected to not have any advantage).
TODO list:
ProfileCipherInputStream
where it assumes things about a particular cipher. This "particular cipher" has to be removed so that ktor/tls works.