Comments (2)
I looked at the CPR code and found that it uses a thread pool and poll implementation, which seems to occupy one thread per request. The thread pool has a minimum thread count of 1 and a maximum thread count equal to the number of CPU cores. If the CPU has 'n' cores, then the requests appear to be executed in groups of 'n'.
Description
I want to handle http get requests in async callback method.
In my ideal imagaition, it will cost one get request latency. (because i think in best siution, it should be parallelled executed).
but the test code seems cost a serialized time, which it's equal with send requests one by one.
could you help on this? how can i achieve the best performance with blocking?
Example/How to Reproduce
#include <cpr/cpr.h> #include <iostream> using namespace cpr; using namespace std; const std::string & url = "https://api.coinex.com/v1/market/detail?market=BTCUSDT"; void execute(const std::string & u, size_t i) { std::shared_ptr<cpr::Session> session = std::make_shared<cpr::Session>(); session->SetUrl(cpr::Url(u)); timeval t; gettimeofday(&t, NULL); auto future_text = session->GetCallback([i, t](Response r) { timeval t1; gettimeofday(&t1, NULL); cout << "request #" << i << " return" << " cost " << (t1.tv_sec - t.tv_sec) * 1e3 + (t1.tv_usec - t.tv_usec) / 1e3 << endl; }); } int main(int argc, char** argv) { for (size_t i = 0; i < 100; ++i) { execute(url, i); } while (1); }
the first request got its return in 145ms, but the last cost 7800ms.
and one more try:
#include <cpr/cpr.h> #include <iostream> #include <unistd.h> #include <mutex> using namespace cpr; using namespace std; std::mutex mut_; const std::string & url = "https://api.coinex.com/v1/market/detail?market=BTCUSDT"; std::shared_ptr<cpr::Session> session = std::make_shared<cpr::Session>(); std::vector<int> lats; void execute(const std::string & u, size_t i) { timeval t; // t2; gettimeofday(&t, NULL); // auto future_text = session->GetCallback([i, t](Response r) { session->GetCallback([i, t](Response r) { std::lock_guard<std::mutex> lg(mut_); timeval t1; gettimeofday(&t1, NULL); cout << "request #" << i << " return with" << r.text << " cost " << (t1.tv_sec - t.tv_sec) * 1e3 + (t1.tv_usec - t.tv_usec) / 1e3 << endl; lats[i] = (t1.tv_sec - t.tv_sec) * 1e3 + (t1.tv_usec - t.tv_usec) / 1e3; }); } int main(int argc, char** argv) { lats.resize(100); session->SetUrl(cpr::Url(url)); for (size_t i = 0; i < 100; ++i) execute(url, i); sleep(10); for (size_t i = 0; i < 100; ++i) { cout << lats[i] << endl; } }
Possible Fix
the right interface function or set correctly.
Where did you get it from?
GitHub (branch e.g. master)
Additional Context/Your Environment
- OS: Centos Stream 8
- Version: libcurl 8.2.1
- gcc 13
from cpr.
i want to find a library with epoll implementation with a eventloop, but can not find a light-weight one
from cpr.
Related Issues (20)
- INTERNAL_ERROR(4) on any requests that goes to a site protected with CloudFlare HOT 8
- can't linking to executable HOT 1
- put cpr into a cmake project and error while loading shared libraries: libinih.so: cannot open shared object file: No such file or directory HOT 1
- Cmake cache generation fails. HOT 1
- Response.GetCertInfos() is not const HOT 2
- WriteCallback should take a string_view as argument instead of a std::string to avoid a copy HOT 2
- install cpr, but the dependencies of cpr (curl) can not be installed to the correct path HOT 2
- can cpr set keepalive writetimeout readtimeout when sending a post request? HOT 5
- Set propper runtime library for use in msvc project HOT 5
- C++20 ixx Module | unresolved external symbol _Cnd_timedwait_for HOT 7
- Fully featured Url parser HOT 1
- When is the time for threadpool creation? HOT 2
- libcpr fails to build on Windows because zlib isn't found HOT 2
- Resolving linker errors with nuget package? HOT 1
- Build failure: `httpServer.cpp: error: overflow in conversion from 'long long int' to 'time_t' {aka 'long int'} changes value from '3905119080' to '-389848216' [-Werror=overflow]` HOT 2
- Some tests fail on PowerPC [84% tests passed, 4 tests failed out of 25] HOT 13
- Build failure on macOS 10.15: `error: no viable constructor or deduction guide for deduction of template arguments of 'function'` HOT 1
- Automatically manage cookies like c # CookieContainer
- cpr::ProgressCallback in combination with cpr::Download has the values of up- and download switched HOT 2
- libcpr static build option HOT 4
Recommend Projects
-
React
A declarative, efficient, and flexible JavaScript library for building user interfaces.
-
Vue.js
🖖 Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.
-
Typescript
TypeScript is a superset of JavaScript that compiles to clean JavaScript output.
-
TensorFlow
An Open Source Machine Learning Framework for Everyone
-
Django
The Web framework for perfectionists with deadlines.
-
Laravel
A PHP framework for web artisans
-
D3
Bring data to life with SVG, Canvas and HTML. 📊📈🎉
-
Recommend Topics
-
javascript
JavaScript (JS) is a lightweight interpreted programming language with first-class functions.
-
web
Some thing interesting about web. New door for the world.
-
server
A server is a program made to process requests and deliver data to clients.
-
Machine learning
Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.
-
Visualization
Some thing interesting about visualization, use data art
-
Game
Some thing interesting about game, make everyone happy.
Recommend Org
-
Facebook
We are working to build community through open source technology. NB: members must have two-factor auth.
-
Microsoft
Open source projects and samples from Microsoft.
-
Google
Google ❤️ Open Source for everyone.
-
Alibaba
Alibaba Open Source for everyone
-
D3
Data-Driven Documents codes.
-
Tencent
China tencent open source team.
from cpr.