C#-verteilter ID-Generator
Einleitung
Dies ist auf der Grundlage der Twitter-Schneeflocke geschrieben. Hier ist die chinesische Einführung.
Wie gezeigt In der Abbildung oben sind für eine 64-Bit-ID mit Ausnahme des Vorzeichenbits ganz links (festgelegt auf 0, um sicherzustellen, dass alle generierten IDs positive Zahlen sind) noch 63 Bits verfügbar.
Der folgende Code ist Das gleiche wie in der Abbildung. Mit Ausnahme der 10-Bit-Arbeitsmaschinen-ID in der Mitte kann die Anzahl der Ziffern im Zeitstempel und in der Seriennummer entsprechend Ihren eigenen Anforderungen geändert werden. Sie können die Arbeitsmaschinen-ID in der Mitte nach links oder nach rechts verschieben.
Code
/// <summary> /// 64位ID生成器,最高位为符号位,始终为0,可用位数63. /// 实例编号占10位,范围为0-1023 /// 时间戳和索引共占53位 /// </summary> public sealed class IdCreator { long timestamp = 0;//当前时间戳 long index = 0;//索引/计数器 long instanceID;//实例编号 int indexBitLength;//索引可用位数 long tsMax = 0;//时间戳最大值 long indexMax = 0; static IdCreator _default = new IdCreator(); /// <summary> /// /// </summary> /// <param name="instanceID">实例编号(0-1023)</param> /// <param name="indexBitLength">索引可用位数(1-32).每秒可生成ID数等于2的indexBitLength次方.大并发情况下,当前秒内ID数达到最大值时,将使用下一秒的时间戳,不影响获取ID.</param> /// <param name="initTimestamp">初始化时间戳,精确到秒.当之前同一实例生成ID的timestamp值大于当前时间的时间戳时, /// 有可能会产生重复ID(如持续一段时间的大并发请求).设置initTimestamp比最后的时间戳大一些,可避免这种问题</param> public IdCreator(int instanceID, int indexBitLength, long? initTimestamp = null) { if (instanceID < 0) { //这里给每个实例随机生成个实例编号 Random r = new Random(); this.instanceID = r.Next(0, 1024); } else { this.instanceID = instanceID % 1024; } if (indexBitLength < 1) { this.indexBitLength = 1; } else if (indexBitLength > 32) { this.indexBitLength = 32; } else { this.indexBitLength = indexBitLength; } tsMax = Convert.ToInt64(new string('1', 53 - indexBitLength), 2); indexMax = Convert.ToInt64(new string('1', indexBitLength), 2); if (initTimestamp != null) { this.timestamp = initTimestamp.Value; } } /// <summary> /// 默认每实例每秒生成65536个ID,从1970年1月1日起,累计可使用4358年 /// </summary> /// <param name="instanceID">实例编号(0-1023)</param> public IdCreator(int instanceID) : this(instanceID, 16) { } /// <summary> /// 默认每秒生成65536个ID,从1970年1月1日起,累计可使用4358年 /// </summary> public IdCreator() : this(-1) { } /// <summary> /// 生成64位ID /// </summary> /// <returns></returns> public long Create() { long id = 0; lock (this) { //增加时间戳部分 long ts = Harry.Common.Utils.GetTimeStamp() / 1000; ts = ts % tsMax; //如果超过时间戳允许的最大值,从0开始 id = ts << (10 + indexBitLength);//腾出后面部分,给实例编号和缩引编号使用 //增加实例部分 id = id | (instanceID << indexBitLength); //获取计数 if (timestamp < ts) { timestamp = ts; index = 0; } else { if (index > indexMax) { timestamp++; index = 0; } } id = id | index; index++; } return id; } /// <summary> /// 获取当前实例的时间戳 /// </summary> public long CurrentTimestamp { get { return this.timestamp; } } /// <summary> /// 默认每实例每秒生成65536个ID,从1970年1月1日起,累计可使用4358年 /// </summary> public static IdCreator Default { get { return _default; } } }
Codebeschreibung
Wenn Sie es verwenden, Sie müssen eine neue Instanz von IdCreator erstellen und dann die Methode Create() aufrufen. Sie müssen die Instanz von IdCreator einer statischen Variablen zuweisen, um die Eindeutigkeit der ID-Nummer sicherzustellen Bei der Bereitstellung müssen Sie den Parameter „instanceID“ an den Konstruktor von „IdCreator“ übergeben. Jede Bereitstellung muss einen anderen Wert im Bereich von 0 bis 1023 haben. Der Parameter „indexBitLength“ im Konstruktor
stellt die Länge der Seriennummer ganz rechts dar ' in der Abbildung. Es ist nicht mehr auf 12 Bit festgelegt und reicht von 1 bis 32 Bit, wobei der Zeitstempel übrig bleibt.
Hinweis: Der Zeitstempel der IdCreator-Klasse wird in Sekunden gemessen Wenn Sie es in Millisekunden ändern möchten, müssen Sie nur den Code long ts = Harry.Common.Utils.GetTimeStamp() / 1000; in long ts = Harry.Common.Utils.GetTimeStamp(); ändern.
Beispielcode
IdCreator c=new IdCreator(0,16); var id=c.Create();

Heiße KI -Werkzeuge

Undress AI Tool
Ausziehbilder kostenlos

Undresser.AI Undress
KI-gestützte App zum Erstellen realistischer Aktfotos

AI Clothes Remover
Online-KI-Tool zum Entfernen von Kleidung aus Fotos.

Clothoff.io
KI-Kleiderentferner

Video Face Swap
Tauschen Sie Gesichter in jedem Video mühelos mit unserem völlig kostenlosen KI-Gesichtstausch-Tool aus!

Heißer Artikel

Heiße Werkzeuge

Notepad++7.3.1
Einfach zu bedienender und kostenloser Code-Editor

SublimeText3 chinesische Version
Chinesische Version, sehr einfach zu bedienen

Senden Sie Studio 13.0.1
Leistungsstarke integrierte PHP-Entwicklungsumgebung

Dreamweaver CS6
Visuelle Webentwicklungstools

SublimeText3 Mac-Version
Codebearbeitungssoftware auf Gottesniveau (SublimeText3)

Der Unterschied zwischen Multithreading und Asynchron besteht darin, dass Multithreading gleichzeitig mehrere Threads ausführt, während asynchron Operationen ausführt, ohne den aktuellen Thread zu blockieren. Multithreading wird für rechenintensive Aufgaben verwendet, während asynchron für die Benutzerinteraktion verwendet wird. Der Vorteil des Multi-Threading besteht darin, die Rechenleistung zu verbessern, während der Vorteil von Asynchron nicht darin besteht, UI-Threads zu blockieren. Die Auswahl von Multithreading oder Asynchron ist von der Art der Aufgabe abhängt: Berechnungsintensive Aufgaben verwenden Multithreading, Aufgaben, die mit externen Ressourcen interagieren und die UI-Reaktionsfähigkeit asynchron verwenden müssen.

Die Geschichte und Entwicklung von C# und C sind einzigartig, und auch die Zukunftsaussichten sind unterschiedlich. 1.C wurde 1983 von Bjarnestrustrup erfunden, um eine objektorientierte Programmierung in die C-Sprache einzuführen. Sein Evolutionsprozess umfasst mehrere Standardisierungen, z. B. C 11 Einführung von Auto-Keywords und Lambda-Ausdrücken, C 20 Einführung von Konzepten und Coroutinen und sich in Zukunft auf Leistung und Programme auf Systemebene konzentrieren. 2.C# wurde von Microsoft im Jahr 2000 veröffentlicht. Durch die Kombination der Vorteile von C und Java konzentriert sich seine Entwicklung auf Einfachheit und Produktivität. Zum Beispiel führte C#2.0 Generics und C#5.0 ein, die eine asynchrone Programmierung eingeführt haben, die sich in Zukunft auf die Produktivität und das Cloud -Computing der Entwickler konzentrieren.

C# Multi-Thread-Programmierung ist eine Technologie, mit der Programme gleichzeitig mehrere Aufgaben ausführen können. Es kann die Programmeffizienz verbessern, indem es die Leistung verbessert, die Reaktionsfähigkeit verbessert und die parallele Verarbeitung implementiert. Während die Thread -Klasse eine Möglichkeit bietet, Threads direkt zu erstellen, können erweiterte Tools wie Task und Async/Warted sicherer asynchroner Operationen und eine sauberere Codestruktur liefern. Häufige Herausforderungen bei der Multithread -Programmierung umfassen Deadlocks, Rassenbedingungen und Ressourcenleckage, die eine sorgfältige Gestaltung von Fadenmodellen und die Verwendung geeigneter Synchronisationsmechanismen erfordern, um diese Probleme zu vermeiden.

Wie erstelle ich Anwendungen mit .NET? Erstellen Anwendungen mit .NET können in den folgenden Schritten erreicht werden: 1) Verstehen Sie die Grundlagen von .NET, einschließlich C# Sprache und plattformübergreifender Entwicklungsunterstützung; 2) Kernkonzepte wie Komponenten und Arbeitsprinzipien des .NET -Ökosystems lernen; 3) Master Basic und Advanced Nutzung, von einfachen Konsolenanwendungen bis hin zu komplexen Webapis- und Datenbankvorgängen; 4) Mit gemeinsamen Fehlern und Debugging -Techniken wie Konfigurations- und Datenbankverbindungsproblemen vertraut sein; 5) Optimierung der Anwendungsleistung und Best Practices wie asynchrone Programmieren und Zwischenspeichern.

C#.NETisversatileforbothwebanddesktopdevelopment.1)Forweb,useASP.NETfordynamicapplications.2)Fordesktop,employWindowsFormsorWPFforrichinterfaces.3)UseXamarinforcross-platformdevelopment,enablingcodesharingacrossWindows,macOS,Linux,andmobiledevices.

Der Vorteil des Multithreading besteht darin, dass es die Leistung und die Ressourcenauslastung verbessern kann, insbesondere für die Verarbeitung großer Datenmengen oder die Durchführung zeitaufwändiger Vorgänge. Es ermöglicht es, mehrere Aufgaben gleichzeitig auszuführen, wodurch die Effizienz verbessert wird. Zu viele Threads können jedoch zu einer Leistungsverschlechterung führen. Sie müssen daher sorgfältig die Anzahl der Threads basierend auf der Anzahl der CPU -Kerne und Aufgabenmerkmale auswählen. Darüber hinaus beinhaltet die Multi-Thread-Programmierung Herausforderungen wie Deadlock- und Rassenbedingungen, die unter Verwendung von Synchronisationsmechanismen gelöst werden müssen, und erfordern solide Kenntnisse über die gleichzeitige Programmierung, das Abwägen der Vor- und Nachteile und die Verwendung mit Vorsicht.

.NetFramework ist ein Software -Framework, und C# ist eine Programmiersprache. 1..NetFramework bietet Bibliotheken und Dienste, die Desktop-, Web- und mobile Anwendungsentwicklung unterstützen. 2.C# ist für .Netframework entwickelt und unterstützt moderne Programmierfunktionen. 3..NETFRAMEWORK verwaltet die Codeausführung über CLR, und der C# Code wird in IL zusammengestellt und wird von CLR ausgeführt. V. 5. Zu den häufigen Fehlern zählen Typenkonvertierung und asynchrone Programmieradrocken. Visualstudio -Tools sind zum Debuggen erforderlich.

Wie bereitete ich eine C# .NET -App für Azure oder AWS bereit? Die Antwort ist, AzureAppservice und Awselasticbeanstalk zu verwenden. 1. Automatisieren Sie bei Azure die Bereitstellung mit AzureAppservice und AzurePipelines. 2. Verwenden Sie bei AWS Amazon ElasticbeanSpalk und AWSLambda, um Bereitstellungen und serverlosen Computer zu implementieren.
