Lua производительность печати, Windows против Linux - PullRequest
1 голос
/ 15 марта 2019

Используя C, имея

typedef struct Entity {
    size_t id;
    char *luaFun;
} Entity;

и вызывая

void LuaEntityUpdate(Entity *entity, double dt) {
    lua_getglobal(L, entity->luaFun);
    lua_pushinteger(L, entity->id);
    lua_pushnumber(L, dt);
    lua_call(L, 2, 0);
}

в глобальный (entity-> luaFun = "entity_update")

function entity_update(id, dt)
    print("Entity updated ", id, " ", dt)
end

вцикл (одиночный фрейм игры) занимает около:

  • 0,2 секунды для 128 сущностей, использующих Windows *
  • 0,2 секунды для 8096 сущностей, использующихLinux **

, что делает сборку Windows примерно в 64 раза медленнее, чем в Linux (на той же машине запущенные приложения сокращены до минимума, причем оба используют одно ядро).

Чтоможет быть причиной такой огромной разницы? Пожалуйста, смотрите комментарии и редактируйте ниже.

* Windows 10, Mingw-w64, из: "MingW-W64-builds", с использованием бинарных выпусков Lua 5.3.5

** Mint 16, gcc, Lua 5.3.5 build из официальных источников

- EDIT

Как и предлагалось в комментариях, я пытался измерить производительность без печатилюбые сообщения и бинго!Без какой-либо производительности печати почти соответствует сборке Linux.

Теперь я попытался заменить печать на:

local w = print
w(...)

-

io.write(...)

-

local w = io.write
w(...)

но все они работают одинаково.

Я также пытался запустить программу из команды Windows, которая примерно на 30% быстрее, чем консоль, захваченная в CLion.

Есть ли какие-нибудь хитрости, чтобы сделать это быстрее в Windows?Было бы замечательно, чтобы утилита ведения журналов была доступна в частях lua, но даже для отладки это слишком медленно для приложений реального времени.

Также: изменен заголовок

...