/*下面是一个简单的C++程序,它使用多线程技术来处理大量的HTTP请求:
在这个程序中,我们定义了一个`Request`结构体表示HTTP请求,以及一个`HttpProcessor`类来处理这些请求。`HttpProcessor`类创建了一定数量的工作线程,它们等待任务队列中的请求,并在请求到达时进行处理。
通过调用`HttpProcessor.sendRequest()`方法发送HTTP请求,将请求添加到任务队列中。
工作线程会不断从队列中获取请求并进行处理。当程序结束时,停止工作线程并等待它们完成所有剩余的请求。*/
#include <iostream>
#include <string>
#include <thread>
#include <mutex>
#include <condition_variable>
#include <queue>
using namespace std;
// 定义一个请求任务
struct Request {
string url;
int timeout;
};
class HttpProcessor {
public:
void start() {
// 创建一定数量的工作线程
for (int i = 0; i < THREAD_COUNT; ++i) {
threads.emplace_back(bind(&HttpProcessor::threadWorker, this));
}
}
void stop() {
// 通知所有工作线程退出
{
lock_guard<mutex> lock(m_mutex);
m_exiting = true;
}
m_cv.notify_all();
// 等待所有线程退出
for (auto& thread : threads) {
thread.join();
}
threads.clear();
}
// 发送HTTP请求
void sendRequest(const Request& request) {
unique_lock<mutex> lock(m_mutex);
m_requests.push(request);
lock.unlock();
m_cv.notify_one();
}
private:
static const int THREAD_COUNT = 4; // 工作线程数量
// 工作线程函数
void threadWorker() {
while (true) {
Request request;
{
unique_lock<mutex> lock(m_mutex);
// 队列为空且退出标志为真时,线程退出
while (m_requests.empty() && !m_exiting) {
m_cv.wait(lock);
}
if (m_exiting) {
return;
}
request = m_requests.front();
m_requests.pop();
}
// 处理业务逻辑,这里简单打印请求信息
cout << "Processing request: " << request.url << ", timeout=" << request.timeout << endl;
}
}
private:
mutex m_mutex; // 互斥量
condition_variable m_cv; // 条件变量
queue<Request> m_requests; // 任务队列
vector<thread> threads; // 工作线程
bool m_exiting = false; // 退出标志
};
int main() {
HttpProcessor httpProcessor;
// 启动工作线程
httpProcessor.start();
// 发送HTTP请求
for (int i = 0; i < 100; ++i) {
Request request{"http://www.example.com", 5000};
httpProcessor.sendRequest(request);
}
// 等待所有请求处理完成
this_thread::sleep_for(chrono::seconds(5));
// 停止工作线程
httpProcessor.stop();
return 0;
}
多线程技术来处理大量的HTTP请求
最新推荐文章于 2024-05-20 10:02:51 发布
该程序定义了一个Request结构体表示HTTP请求,并使用HttpProcessor类创建多个工作线程来处理请求。工作线程从任务队列中获取并处理请求,通过sendRequest方法发送请求。当程序结束时,会优雅地停止并等待所有线程完成剩余任务。
摘要由CSDN通过智能技术生成