@@ -12,7 +12,7 @@ namespace Yitter.OrgSystem.TestA | |||
class Program | |||
{ | |||
// 测试参数(默认配置下,最佳性能是10W/s) | |||
static int genIdCount = 2;//5000; // 计算ID数量(如果要验证50W效率,请将TopOverCostCount设置为20000或适当增加SeqBitLength) | |||
static int genIdCount = 500000;//5000; // 计算ID数量(如果要验证50W效率,请将TopOverCostCount设置为2000或适当增加SeqBitLength) | |||
static short method = 1; // 1-漂移算法,2-传统算法 | |||
@@ -27,6 +27,9 @@ namespace Yitter.OrgSystem.TestA | |||
static void Main(string[] args) | |||
{ | |||
RunSingle(); | |||
return; | |||
Console.WriteLine("Hello World! C#"); | |||
var options = new IdGeneratorOptions() | |||
@@ -130,16 +133,42 @@ namespace Yitter.OrgSystem.TestA | |||
private static void RunSingle() | |||
{ | |||
DateTime start = DateTime.Now; | |||
for (int i = 0; i < genIdCount; i++) | |||
var options = new IdGeneratorOptions() | |||
{ | |||
var id = IdGen.NewLong(); | |||
} | |||
Method = 1, | |||
WorkerId = 1, | |||
//WorkerIdBitLength = 6, | |||
SeqBitLength = 6, | |||
//DataCenterIdBitLength = 0, | |||
//TopOverCostCount = 2000, | |||
DateTime end = DateTime.Now; | |||
Console.WriteLine($"++++++++++++++++++++++++++++++++++++++++, total: {(end - start).TotalMilliseconds} ms"); | |||
Interlocked.Increment(ref Program.Count); | |||
//TimestampType = 1, | |||
// MinSeqNumber = 1, | |||
// MaxSeqNumber = 200, | |||
// BaseTime = DateTime.Now.AddYears(-10), | |||
}; | |||
//IdGen = new DefaultIdGenerator(options); | |||
YitIdHelper.SetIdGenerator(options); | |||
while (true) | |||
{ | |||
DateTime start = DateTime.Now; | |||
for (int i = 0; i < genIdCount; i++) | |||
{ | |||
//var id = IdGen.NewLong(); | |||
var id = YitIdHelper.NextId(); | |||
} | |||
DateTime end = DateTime.Now; | |||
Console.WriteLine($"++++++++++++++++++++++++++++++++++++++++, total: {(end - start).TotalMilliseconds} ms"); | |||
Thread.Sleep(1000); | |||
} | |||
//Interlocked.Increment(ref Program.Count); | |||
} | |||
private static void Go(IdGeneratorOptions options) | |||
@@ -13,51 +13,62 @@ | |||
#include "idgen/IdGenerator.h" | |||
#include "YitIdHelper.h" | |||
const int GenIdCount = 50000; | |||
const int GenIdCount = 500000; | |||
const bool multiThread = false; | |||
const int threadCount = 50; | |||
const int method = 1; | |||
void RunMultiThread() { | |||
//int64_t start = GetCurrentMicroTime(); | |||
for (int i = 0; i < GenIdCount / threadCount; i++) { | |||
void RunMultiThread() | |||
{ | |||
// int64_t start = GetCurrentMicroTime(); | |||
for (int i = 0; i < GenIdCount / threadCount; i++) | |||
{ | |||
int64_t id = NextId(); | |||
printf("ID: %D\n", id); | |||
} | |||
int64_t end = GetCurrentMicroTime(); | |||
//printf("%s,total:%d μs\n", method == 1 ? "1" : "2", (end - start)); | |||
// printf("%s,total:%d μs\n", method == 1 ? "1" : "2", (end - start)); | |||
} | |||
void RunSingle() { | |||
void RunSingle() | |||
{ | |||
int64_t start = GetCurrentMicroTime(); | |||
for (int i = 0; i < GenIdCount; i++) { | |||
for (int i = 0; i < GenIdCount; i++) | |||
{ | |||
int64_t id = NextId(); | |||
// printf("ID: %ld\n", id); | |||
// printf("ID: %ld\n", id); | |||
} | |||
int64_t end = GetCurrentMicroTime(); | |||
printf("%s, total: %d us\n", method == 1 ? "1" : "2", (end - start)); | |||
} | |||
int main() { | |||
int main() | |||
{ | |||
IdGeneratorOptions options = BuildIdGenOptions(1); | |||
options.Method = method; | |||
options.WorkerId = 1; | |||
options.SeqBitLength = 6; | |||
options.SeqBitLength = 10; | |||
// options.TopOverCostCount = 2000; | |||
SetIdGenerator(options); | |||
pthread_t tid[threadCount]; | |||
while (1) { | |||
if (multiThread) { | |||
for (int i = 0; i < threadCount; i++) { | |||
if (pthread_create(&tid[i], NULL, (void *) RunMultiThread, NULL) != 0) { | |||
while (1) | |||
{ | |||
if (multiThread) | |||
{ | |||
for (int i = 0; i < threadCount; i++) | |||
{ | |||
if (pthread_create(&tid[i], NULL, (void *)RunMultiThread, NULL) != 0) | |||
{ | |||
printf("thread creation failed\n"); | |||
exit(1); | |||
} | |||
} | |||
} else { | |||
} | |||
else | |||
{ | |||
RunSingle(); | |||
} | |||
@@ -24,22 +24,24 @@ func main() { | |||
// 自定义参数 | |||
var options = idgen.NewIdGeneratorOptions(1) | |||
options.WorkerIdBitLength = 6 | |||
options.SeqBitLength = 6 | |||
options.SeqBitLength = 10 | |||
options.BaseTime = time.Date(2020, 2, 20, 2, 20, 2, 20, time.UTC).UnixNano() / 1e6 | |||
idgen.SetIdGenerator(options) | |||
var genCount = 50000 | |||
for { | |||
var begin = time.Now().UnixNano() / 1e3 | |||
for i := 0; i < genCount; i++ { | |||
// 生成ID | |||
id := idgen.NextId() | |||
fmt.Println(id) | |||
var genCount = 500000 | |||
for j := 0; j < 100000; j++ { | |||
for { | |||
var begin = time.Now().UnixNano() / 1e6 | |||
for i := 0; i < genCount; i++ { | |||
// 生成ID | |||
idgen.NextId() | |||
// fmt.Println(id) | |||
} | |||
var end = time.Now().UnixNano() / 1e6 | |||
fmt.Println("耗时:", (end - begin), "ms") | |||
time.Sleep(time.Duration(1000) * time.Millisecond) | |||
} | |||
var end = time.Now().UnixNano() / 1e3 | |||
fmt.Println(end - begin) | |||
time.Sleep(time.Duration(1000) * time.Millisecond) | |||
} | |||
} else { | |||
// ip := "localhost" | |||
@@ -19,7 +19,9 @@ | |||
*.zip | |||
*.tar.gz | |||
*.rar | |||
target/ | |||
target | |||
.vscode | |||
*.code-workspace | |||
# virtual machine crash logs, see http://www.java.com/en/download/help/error_hotspot.xml | |||
hs_err_pid* |
@@ -41,9 +41,9 @@ | |||
<properties> | |||
<project.build.sourceEncoding>UTF-8</project.build.sourceEncoding> | |||
<project.reporting.outputEncoding>UTF-8</project.reporting.outputEncoding> | |||
<maven.compiler.source>1.8</maven.compiler.source> | |||
<maven.compiler.target>1.8</maven.compiler.target> | |||
<java.version>1.8</java.version> | |||
<maven.compiler.source>11</maven.compiler.source> | |||
<maven.compiler.target>11</maven.compiler.target> | |||
<java.version>11</java.version> | |||
</properties> | |||
<dependencies> | |||
<dependency> | |||
@@ -12,7 +12,7 @@ public class StartUp { | |||
* [不同CPU可能结果有差异,但相对大小不变] | |||
* 默认配置下,最佳性能是5W/s-8W/s | |||
*/ | |||
final static int genIdCount = 50000; | |||
final static int genIdCount = 500000; | |||
//1-漂移算法,2-传统算法 | |||
final static short method = 1; | |||
@@ -20,11 +20,12 @@ public class StartUp { | |||
public static void main(String[] args) { | |||
IdGeneratorOptions options = new IdGeneratorOptions(); | |||
// options.WorkerIdBitLength = 6; | |||
// options.SeqBitLength = 6; | |||
// options.WorkerIdBitLength = 6; // 默认6 | |||
options.SeqBitLength = 10; // 默认6 | |||
// options.BaseTime = 1582206693000L; | |||
options.Method = method; | |||
options.WorkerId = 1; | |||
options.TopOverCostCount=2000; | |||
// 首先测试一下 IdHelper 方法,获取单个Id | |||
YitIdHelper.setIdGenerator(options); | |||