Repository navigation
Expand file tree
/
Copy pathtask_worker.cpp
More file actions
68 lines (53 loc) · 1.44 KB
/
Copy pathtask_worker.cpp
File metadata and controls
68 lines (53 loc) · 1.44 KB
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
#include "task_worker.h"
#include "session.h"
#include "dispatcher.h"
#include "log.h"
TaskWorker::TaskWorker(Queue& task_queue, Queue& response_queue)
: task_queue_(task_queue), response_queue_(response_queue)
{
stop_ = false;
}
TaskWorker::~TaskWorker()
{
stop_ = true;
}
int TaskWorker::Run()
{
LogInfo("start");
uint64_t loop = 0;
uint64_t slow = 0;
uint64_t used = 0;
while (!stop_)
{
void* item = task_queue_.Pop();
assert(NULL != item);
Session* client = reinterpret_cast<Session*>(item);
client->CheckDispatch();
Slice request = client->RequestBuffer();
Slice response = client->ResponseBuffer();
Timer watch;
Dispatcher::Dispatch(request, response);
client->CommitResponse(response.size);
response_queue_.Push(item);
client->CheckResponse();
uint64_t ms_used = watch.Read();
LogDebug("task from client %s %d request.size %zu response.size %zu time %llu ms",
client->IP(),
client->FileDescriptor(),
request.size,
response.size,
ms_used);
used += ms_used;
if (ms_used > 10)
{
slow++;
}
if (loop++ % 1000 == 0)
{
LogInfo("loop %llu used %llu slow %llu", loop, used, slow);
}
StatusAddTask();
}
LogInfo("exit");
return 0;
}