There is nothing wrong in using threads.
If you want them to communicate, simplest and quite effective way would be building event queueStack list with event objects - packets.
If you want to process them as fast as update, then something like this will do.
//unity thread
private void Update(){
myThread.processQueue();
}
//my thread
//your thread which populates *queue* with events.
List<someData> queue = new List<someData>();
public void processQueue(){
for(int i = queue.Count-1; i >= 0; i--){
someData d = queue*; //do what you like*
queue.RemoveAt(i); } } Now this is Unity thread synchronized.
The Unity’s API is not thread safe, you have to execute them in main thread. Well you can try this package on Asset Store will help you to using threading easier. iS.CentralDispatch - a Multi-Threading Framework | Integration | Unity Asset Store
You can simply use only one line of code to start a thread and execute Unity API safely.