-
Notifications
You must be signed in to change notification settings - Fork 9
/
ConcurrentHashMapTest.cpp
90 lines (73 loc) · 2.85 KB
/
ConcurrentHashMapTest.cpp
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
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
#include "ConcurrentHashMap.hpp"
#include "Utils.hpp"
#define N 100000000
struct MarketData
{
char Ticker[16];
double OpenPrice;
double LastPrice;
double ClosePrice;
};
double getdetlatimeofday(struct timeval *begin, struct timeval *end)
{
return (end->tv_sec + end->tv_usec * 1.0 / 1000000) -
(begin->tv_sec + begin->tv_usec * 1.0 / 1000000);
}
int main(int ragc, char *argv[])
{
// producer
std::unordered_map<std::string, int> tickerIndexMap;
tickerIndexMap["SZ000001"] = 0;
tickerIndexMap["SZ000002"] = 1;
tickerIndexMap["SZ000003"] = 2;
ConcurrentHashMap<MarketData> conMap(3, 0XFF000001, tickerIndexMap);
struct timeval begin, end;
gettimeofday(&begin, NULL);
for (size_t i = 0; i < N; i++)
{
MarketData market;
strncpy(market.Ticker, "SZ000001", sizeof(market.Ticker));
market.OpenPrice = 1.0;
conMap.insert("SZ000001", market);
strncpy(market.Ticker, "SZ000002", sizeof(market.Ticker));
market.OpenPrice = 2.0;
conMap.insert("SZ000002", market);
strncpy(market.Ticker, "SZ000003", sizeof(market.Ticker));
market.OpenPrice = 3.0;
conMap.insert("SZ000003", market);
}
gettimeofday(&end, NULL);
double tm = getdetlatimeofday(&begin, &end);
printf("producer tid=%lu %f MB/s %f msg/s elapsed= %f size= %u\n", pthread_self(), 3 * N * sizeof(MarketData) * 1.0 / (tm * 1024 * 1024), 3 * N * 1.0 / tm, tm, 3 * N);
// consumer
// std::unordered_map<std::string, int> tickerIndexMap;
// tickerIndexMap["SZ000001"] = 0;
// tickerIndexMap["SZ000002"] = 1;
// tickerIndexMap["SZ000003"] = 2;
// ConcurrentHashMap<MarketData> conMap(3, 0XFF000001, tickerIndexMap);
// struct timeval begin, end;
// gettimeofday(&begin, NULL);
// for (size_t i = 0; i < N; i++)
// {
// MarketData market;
// std::string ticker = "SZ000001";
// conMap.get(ticker, market);
// // printf("Ticker %s OpenPrice %2.f\n", market.Ticker, market.OpenPrice);
// ticker = "SZ000002";
// conMap.get(ticker, market);
// // printf("Ticker %s OpenPrice %2.f\n", market.Ticker, market.OpenPrice);
// ticker = "SZ000003";
// conMap.get(ticker, market);
// // printf("Ticker %s OpenPrice %2.f\n", market.Ticker, market.OpenPrice);
// }
// gettimeofday(&end, NULL);
// double tm = getdetlatimeofday(&begin, &end);
// printf("consumer tid=%lu %f MB/s %f msg/s elapsed= %f size= %u\n", pthread_self(), 3 * N * sizeof(MarketData) * 1.0 / (tm * 1024 * 1024), 3 * N * 1.0 / tm, tm, 3 * N);
// wait
getchar();
return 0;
}
// g++ -O3 -std=c++11 ConcurrentHashMapTest.cpp -o producer
// g++ -O3 -std=c++11 ConcurrentHashMapTest.cpp -o consumer
// 删除共享内存
// ipcs | grep user |grep 0xff | awk '{print $1}' | xargs -d '\n' ipcrm -M