В данный момент я еще не реализовывал ничего, я просто хочу избавиться от текущей реализации Task Scheduler, так как она основана на multimap и в целом не очень то быстрая, тот же EnTT даже в неотсортированном списке и то быстрее перебирает, а если еще и отсортировать, то там по сути производительность взлетит. Однако, тут весь подвох в том, что чем больше задач, тем выше сложность сортировки. Я поэтому подумал, что тут лучше отдельный поток запустить и оставить ему сортировку и проверку задач.
Например, основной поток хочет добавить для Entity1 задачу, через 5 секунд напиши в чат "Hello", мы вызываем грубо говоря
CreateTask(5s, [userid](const auto& Obj) { // hello all });
Этот метод добавляет задачу в entt::registry, который лежит во втором потоке (естественно, тут нужно блочить второй поток при вставке задачи)
После вставки, второй поток итерируется по всем объектам внутри registry, там по сути даже можно параллельные итерации запустить, если время задачи < текущего, то задачу удаляем из EnTT и помещаем в
boost::lockfree::spsc_queue task_call
, где основной поток в методе Tick будет проверять вытаскивать задачи из
boost::lockfree::spsc_queue
и вызывать их callback методы