| @@ -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); | |||