Files
Rediska/rediska/worker/AsyncWorker.hpp
Nikita Astafyev 35a6349071
Some checks failed
Code Analysis / analysis (push) Failing after 2m59s
chore: initial commit
2025-12-30 22:34:58 +07:00

43 lines
1008 B
C++

#pragma once
#include <condition_variable>
#include <functional>
#include <memory>
#include <mutex>
#include <queue>
#include <thread>
#include <vector>
#include <grpcpp/grpcpp.h>
#include "rediska/cache/lru/LRU.hpp"
#include "rediska/common/QueueMessage.hpp"
#include "rediska/common/types.hpp"
namespace rediska::worker {
class AsyncWorker {
public:
explicit AsyncWorker(size_t num_workers = 4, size_t cache_capacity = 1000);
~AsyncWorker();
void Start();
void Stop();
void Enqueue(QueueMessage msg);
bool IsRunning() const { return running_; }
private:
void WorkerLoop();
void ProcessMessage(QueueMessage& msg);
void InitializeCache();
std::vector<std::thread> workers_;
std::queue<QueueMessage> message_queue_;
std::mutex queue_mutex_;
std::condition_variable queue_cv_;
std::atomic<bool> running_{false};
size_t num_workers_;
std::unique_ptr<cache::LRU> cache_;
cache::LRUConfig cache_config_;
};
} // namespace rediska::worker