Skip to content

Commit 6f4fb68

Browse files
committed
impl ev io serve pool
1 parent a3aceeb commit 6f4fb68

File tree

4 files changed

+60
-12
lines changed

4 files changed

+60
-12
lines changed

libev/include/singleton_base.h

Lines changed: 0 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -22,11 +22,6 @@ class singleton_base
2222

2323
static _object_create obj;
2424

25-
private:
26-
singleton_base()
27-
{
28-
}
29-
3025
public:
3126

3227
static _T& instance()

libev/source/include/io_loop_pool.h

Lines changed: 6 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -2,25 +2,25 @@
22
#define _IO_LOOP_POOL_H_
33
#include <vector>
44
#include "loop.h"
5+
#include <memory>
56
#include "singleton_base.h"
67

7-
class io_loop_pool: public singleton_base<io_loop_pool>
8+
class io_loop_pool//: public singleton_base<io_loop_pool>
89
{
910
public:
10-
io_loop_pool& instance();
11+
static io_loop_pool& instance();
1112
io_loop& get_io_loop();
1213
bool run();
1314
bool stop();
1415

1516
private:
1617
io_loop_pool();
17-
io_loop_pool(const std::size_t& size);
1818
~io_loop_pool();
1919

20-
2120
private:
22-
std::size_t m_size;
23-
std::vector<io_loop> m_pool;
21+
std::size_t m_size;
22+
std::size_t m_next;
23+
std::vector<std::shared_ptr<io_loop> > m_pool;
2424
};
2525

2626
#endif //_IO_LOOP_POOL_H_

libev/source/src/configuration.cpp

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -101,7 +101,7 @@ void configuration::analyse(const std::vector<std::string>& vstr)
101101
std::size_t i = 0;
102102
for (; i < strtmp.size(); ++i)
103103
{
104-
if (strtmp[i] == '=')
104+
if (strtmp[i] == '=' || i == strtmp.size() - 1)
105105
{
106106
break;
107107
}

libev/source/src/io_loop_pool.cpp

Lines changed: 53 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1 +1,54 @@
11
#include "io_loop_pool.h"
2+
#include "configuration.h"
3+
4+
io_loop_pool& io_loop_pool::instance()
5+
{
6+
static io_loop_pool pool;
7+
return pool;
8+
}
9+
10+
io_loop& io_loop_pool::get_io_loop()
11+
{
12+
if (m_next < m_size)
13+
{
14+
__sync_add_and_fetch(&m_next, 1);
15+
}
16+
else
17+
{
18+
m_next = 0;
19+
}
20+
21+
return *m_pool[m_next];
22+
}
23+
24+
bool io_loop_pool::run()
25+
{
26+
for (std::size_t i = 0; i < m_size; ++i)
27+
{
28+
m_pool[i]->run();
29+
}
30+
return true;
31+
}
32+
33+
bool io_loop_pool::stop()
34+
{
35+
for (std::size_t i = 0; i < m_size; ++i)
36+
{
37+
m_pool[i]->stop();
38+
}
39+
return true;
40+
}
41+
42+
io_loop_pool::io_loop_pool(): m_size(configuration::instance().get_ev_loop_size()), m_next(-1)
43+
{
44+
for (std::size_t i = 0; i < m_size; ++i)
45+
{
46+
m_pool.push_back(std::shared_ptr<io_loop>(new (std::nothrow) io_loop()));
47+
}
48+
}
49+
50+
io_loop_pool::~io_loop_pool()
51+
{
52+
stop();
53+
}
54+

0 commit comments

Comments
 (0)