Nachrichtenverarbeitungsknoten und Parser müssen in einer Multi-Thread-Umgebung mit mehreren Instanzen arbeiten. Es können viele Knotenobjekte oder Parserobjekte, jedes mit mehreren Syntaxelementen, verfügbar sein und viele Threads, die Methoden für diese Objekte ausführen.
Eine Instanz eines Nachrichtenflussverarbeitungsknotens wird von allen Threads, die den Nachrichtenfluss bedienen, in dem der Knoten definiert ist, gemeinsam genutzt. Parser werden auf dem gleichen Thread wie die Knoten aufgerufen; wenn der Nachrichtenfluss mehrere Threads verwendet, werden deshalb auch die Parser aufgerufen.
Dieses Modell muss von einer benutzerdefinierten Erweiterung verwendet werden. Wenn ein benutzerdefinierter Knoten globale Daten oder Ressourcen benötigt, müssen Sie die globalen Daten oder Ressourcen durch die Verwendung von Semaphoren schützen, um den Zugriff über Threads hinweg zu serialisieren. Eine solche serielle Verarbeitung kann jedoch Leistungsengpässe verursachen. Vermeiden Sie die Verwendung globaler Daten und Ressourcen zur Erstellung einer skalierbareren Lösung.
Die von den benutzerdefinierten Erweiterungen implementierten Funktionen müssen simultan verwendbar sein, und alle Funktionen, die sie aufrufen, müssen es ebenfalls sein. Alle Dienstprogrammfunktionen einer benutzerspezifischen Erweiterung sind vollständig simultan verwendbar.
Obwohl eine benutzerdefinierte Erweiterung bei Bedarf zusätzliche Threads erstellen kann, müssen alle C-Dienstprogrammfunktionen und Java-Methoden im gleichen Thread aufgerufen werden, in dem die Funktion cniEvaluate in C oder die Methode evaluate in Java aufgerufen wurde, entsprechend der Sprache, in der der Knoten geschrieben wurde. Falls nicht der gleiche Thread verwendet wird, beeinträchtigt Ihr Code möglicherweise die Integrität des Brokers und führt zu unvorhersehbarem Verhalten. Die zusätzlichen Threads dürfen die benutzerdefinierte API-Erweiterung nicht aufrufen. Die API darf nur vom Hauptthread verwendet werden, der vom Broker aufgerufen wird.
Weitere Informationen zur Funktion cniEvaluate finden Sie unter cniEvaluate.