Skip to content

Instantly share code, notes, and snippets.

@carlosabalde
Created October 14, 2018 17:02
Show Gist options
  • Star 0 You must be signed in to star a gist
  • Fork 0 You must be signed in to fork a gist
  • Save carlosabalde/bd6cb2b17aa71fd4c53864037b89f36b to your computer and use it in GitHub Desktop.
Save carlosabalde/bd6cb2b17aa71fd4c53864037b89f36b to your computer and use it in GitHub Desktop.
#include <stdio.h>
#include <stdlib.h>
#include <unistd.h>
#include <string.h>
#include <assert.h>
#include <pthread.h>
#include <lua.h>
#include <lauxlib.h>
#include <lualib.h>
#define THREADS 20000
// gcc test.c -lpthread -llua
// gcc test.c -lpthread -llua -ljemalloc
// sudo yum install time
// ulimit -n 50000
// /usr/bin/time -v ./a.out
static const char *SCRIPT =
"function f_foo()\n"
" local whatever = {\n"
" ['00000'] = true,\n"
" ['00001'] = true,\n"
" ['00002'] = true,\n"
" ['00003'] = true,\n"
" ['00004'] = true,\n"
" ['00005'] = true,\n"
" ['00006'] = true,\n"
" ['00007'] = true,\n"
" ['00008'] = true,\n"
" ['00009'] = true,\n"
" ['00010'] = true,\n"
" ['00011'] = true,\n"
" ['00012'] = true,\n"
" ['00013'] = true,\n"
" ['00014'] = true,\n"
" ['00015'] = true,\n"
" ['00016'] = true,\n"
" ['00017'] = true,\n"
" ['00018'] = true,\n"
" ['00019'] = true,\n"
" ['00020'] = true,\n"
" ['00021'] = true,\n"
" ['00022'] = true,\n"
" ['00023'] = true,\n"
" ['00024'] = true,\n"
" ['00025'] = true,\n"
" ['00026'] = true,\n"
" ['00027'] = true,\n"
" ['00028'] = true,\n"
" ['00029'] = true,\n"
" ['00030'] = true,\n"
" ['00031'] = true,\n"
" ['00032'] = true,\n"
" ['00033'] = true,\n"
" ['00034'] = true,\n"
" ['00035'] = true,\n"
" ['00036'] = true,\n"
" ['00037'] = true,\n"
" ['00038'] = true,\n"
" ['00039'] = true,\n"
" ['00040'] = true,\n"
" ['00041'] = true,\n"
" ['00042'] = true,\n"
" ['00043'] = true,\n"
" ['00044'] = true,\n"
" ['00045'] = true,\n"
" ['00046'] = true,\n"
" ['00047'] = true,\n"
" ['00048'] = true,\n"
" ['00049'] = true,\n"
" ['00050'] = true,\n"
" ['00051'] = true,\n"
" ['00052'] = true,\n"
" ['00053'] = true,\n"
" ['00054'] = true,\n"
" ['00055'] = true,\n"
" ['00056'] = true,\n"
" ['00057'] = true,\n"
" ['00058'] = true,\n"
" ['00059'] = true,\n"
" ['00060'] = true,\n"
" ['00061'] = true,\n"
" ['00062'] = true,\n"
" ['00063'] = true,\n"
" ['00064'] = true,\n"
" ['00065'] = true,\n"
" ['00066'] = true,\n"
" ['00067'] = true,\n"
" ['00068'] = true,\n"
" ['00069'] = true,\n"
" ['00070'] = true,\n"
" ['00071'] = true,\n"
" ['00072'] = true,\n"
" ['00073'] = true,\n"
" ['00074'] = true,\n"
" ['00075'] = true,\n"
" ['00076'] = true,\n"
" ['00077'] = true,\n"
" ['00078'] = true,\n"
" ['00079'] = true,\n"
" ['00080'] = true,\n"
" ['00081'] = true,\n"
" ['00082'] = true,\n"
" ['00083'] = true,\n"
" ['00084'] = true,\n"
" ['00085'] = true,\n"
" ['00086'] = true,\n"
" ['00087'] = true,\n"
" ['00088'] = true,\n"
" ['00089'] = true,\n"
" ['00090'] = true,\n"
" ['00091'] = true,\n"
" ['00092'] = true,\n"
" ['00093'] = true,\n"
" ['00094'] = true,\n"
" ['00095'] = true,\n"
" ['00096'] = true,\n"
" ['00097'] = true,\n"
" ['00098'] = true,\n"
" ['00099'] = true,\n"
" ['00100'] = true,\n"
" ['00101'] = true,\n"
" ['00102'] = true,\n"
" ['00103'] = true,\n"
" ['00104'] = true,\n"
" ['00105'] = true,\n"
" ['00106'] = true,\n"
" ['00107'] = true,\n"
" ['00108'] = true,\n"
" ['00109'] = true,\n"
" ['00110'] = true,\n"
" ['00111'] = true,\n"
" ['00112'] = true,\n"
" ['00113'] = true,\n"
" ['00114'] = true,\n"
" ['00115'] = true,\n"
" ['00116'] = true,\n"
" ['00117'] = true,\n"
" ['00118'] = true,\n"
" ['00119'] = true,\n"
" ['00120'] = true,\n"
" ['00121'] = true,\n"
" ['00122'] = true,\n"
" ['00123'] = true,\n"
" ['00124'] = true,\n"
" ['00125'] = true,\n"
" ['00126'] = true,\n"
" ['00127'] = true,\n"
" ['00128'] = true,\n"
" ['00129'] = true,\n"
" ['00130'] = true,\n"
" ['00131'] = true,\n"
" ['00132'] = true,\n"
" ['00133'] = true,\n"
" ['00134'] = true,\n"
" ['00135'] = true,\n"
" ['00136'] = true,\n"
" ['00137'] = true,\n"
" ['00138'] = true,\n"
" ['00139'] = true,\n"
" ['00140'] = true,\n"
" ['00141'] = true,\n"
" ['00142'] = true,\n"
" ['00143'] = true,\n"
" ['00144'] = true,\n"
" ['00145'] = true,\n"
" ['00146'] = true,\n"
" ['00147'] = true,\n"
" ['00148'] = true,\n"
" ['00149'] = true,\n"
" ['00150'] = true,\n"
" ['00151'] = true,\n"
" ['00152'] = true,\n"
" ['00153'] = true,\n"
" ['00154'] = true,\n"
" ['00155'] = true,\n"
" ['00156'] = true,\n"
" ['00157'] = true,\n"
" ['00158'] = true,\n"
" ['00159'] = true,\n"
" ['00160'] = true,\n"
" ['00161'] = true,\n"
" ['00162'] = true,\n"
" ['00163'] = true,\n"
" ['00164'] = true,\n"
" ['00165'] = true,\n"
" ['00166'] = true,\n"
" ['00167'] = true,\n"
" ['00168'] = true,\n"
" ['00169'] = true,\n"
" ['00170'] = true,\n"
" ['00171'] = true,\n"
" ['00172'] = true,\n"
" ['00173'] = true,\n"
" ['00174'] = true,\n"
" ['00175'] = true,\n"
" ['00176'] = true,\n"
" ['00177'] = true,\n"
" ['00178'] = true,\n"
" ['00179'] = true,\n"
" ['00180'] = true,\n"
" ['00181'] = true,\n"
" ['00182'] = true,\n"
" ['00183'] = true,\n"
" ['00184'] = true,\n"
" ['00185'] = true,\n"
" ['00186'] = true,\n"
" ['00187'] = true,\n"
" ['00188'] = true,\n"
" ['00189'] = true,\n"
" ['00190'] = true,\n"
" ['00191'] = true,\n"
" ['00192'] = true,\n"
" ['00193'] = true,\n"
" ['00194'] = true,\n"
" ['00195'] = true,\n"
" ['00196'] = true,\n"
" ['00197'] = true,\n"
" ['00198'] = true,\n"
" ['00199'] = true,\n"
" ['00200'] = true,\n"
" ['00201'] = true,\n"
" ['00202'] = true,\n"
" ['00203'] = true,\n"
" ['00204'] = true,\n"
" ['00205'] = true,\n"
" ['00206'] = true,\n"
" ['00207'] = true,\n"
" ['00208'] = true,\n"
" ['00209'] = true,\n"
" ['00210'] = true,\n"
" ['00211'] = true,\n"
" ['00212'] = true,\n"
" ['00213'] = true,\n"
" ['00214'] = true,\n"
" ['00215'] = true,\n"
" ['00216'] = true,\n"
" ['00217'] = true,\n"
" ['00218'] = true,\n"
" ['00219'] = true,\n"
" ['00220'] = true,\n"
" ['00221'] = true,\n"
" ['00222'] = true,\n"
" ['00223'] = true,\n"
" ['00224'] = true,\n"
" ['00225'] = true,\n"
" ['00226'] = true,\n"
" ['00227'] = true,\n"
" ['00228'] = true,\n"
" ['00229'] = true,\n"
" ['00230'] = true,\n"
" ['00231'] = true,\n"
" ['00232'] = true,\n"
" ['00233'] = true,\n"
" ['00234'] = true,\n"
" ['00235'] = true,\n"
" ['00236'] = true,\n"
" ['00237'] = true,\n"
" ['00238'] = true,\n"
" ['00239'] = true,\n"
" ['00240'] = true,\n"
" ['00241'] = true,\n"
" ['00242'] = true,\n"
" ['00243'] = true,\n"
" ['00244'] = true,\n"
" ['00245'] = true,\n"
" ['00246'] = true,\n"
" ['00247'] = true,\n"
" ['00248'] = true,\n"
" ['00249'] = true,\n"
" ['00250'] = true,\n"
" ['00251'] = true,\n"
" ['00252'] = true,\n"
" ['00253'] = true,\n"
" ['00254'] = true,\n"
" ['00255'] = true,\n"
" ['00256'] = true,\n"
" ['00257'] = true,\n"
" ['00258'] = true,\n"
" ['00259'] = true,\n"
" ['00260'] = true,\n"
" ['00261'] = true,\n"
" ['00262'] = true,\n"
" ['00263'] = true,\n"
" ['00264'] = true,\n"
" ['00265'] = true,\n"
" ['00266'] = true,\n"
" ['00267'] = true,\n"
" ['00268'] = true,\n"
" ['00269'] = true,\n"
" ['00270'] = true,\n"
" ['00271'] = true,\n"
" ['00272'] = true,\n"
" ['00273'] = true,\n"
" ['00274'] = true,\n"
" ['00275'] = true,\n"
" ['00276'] = true,\n"
" ['00277'] = true,\n"
" ['00278'] = true,\n"
" ['00279'] = true,\n"
" ['00280'] = true,\n"
" ['00281'] = true,\n"
" ['00282'] = true,\n"
" ['00283'] = true,\n"
" ['00284'] = true,\n"
" ['00285'] = true,\n"
" ['00286'] = true,\n"
" ['00287'] = true,\n"
" ['00288'] = true,\n"
" ['00289'] = true,\n"
" ['00290'] = true,\n"
" ['00291'] = true,\n"
" ['00292'] = true,\n"
" ['00293'] = true,\n"
" ['00294'] = true,\n"
" ['00295'] = true,\n"
" ['00296'] = true,\n"
" ['00297'] = true,\n"
" ['00298'] = true,\n"
" ['00299'] = true,\n"
" ['00300'] = true,\n"
" ['00301'] = true,\n"
" ['00302'] = true,\n"
" ['00303'] = true,\n"
" ['00304'] = true,\n"
" ['00305'] = true,\n"
" ['00306'] = true,\n"
" ['00307'] = true,\n"
" ['00308'] = true,\n"
" ['00309'] = true,\n"
" ['00310'] = true,\n"
" ['00311'] = true,\n"
" ['00312'] = true,\n"
" ['00313'] = true,\n"
" ['00314'] = true,\n"
" ['00315'] = true,\n"
" ['00316'] = true,\n"
" ['00317'] = true,\n"
" ['00318'] = true,\n"
" ['00319'] = true,\n"
" ['00320'] = true,\n"
" ['00321'] = true,\n"
" ['00322'] = true,\n"
" ['00323'] = true,\n"
" ['00324'] = true,\n"
" ['00325'] = true,\n"
" ['00326'] = true,\n"
" ['00327'] = true,\n"
" ['00328'] = true,\n"
" ['00329'] = true,\n"
" ['00330'] = true,\n"
" ['00331'] = true,\n"
" ['00332'] = true,\n"
" ['00333'] = true,\n"
" ['00334'] = true,\n"
" ['00335'] = true,\n"
" ['00336'] = true,\n"
" ['00337'] = true,\n"
" ['00338'] = true,\n"
" ['00339'] = true,\n"
" ['00340'] = true,\n"
" ['00341'] = true,\n"
" ['00342'] = true,\n"
" ['00343'] = true,\n"
" ['00344'] = true,\n"
" ['00345'] = true,\n"
" ['00346'] = true,\n"
" ['00347'] = true,\n"
" ['00348'] = true,\n"
" ['00349'] = true,\n"
" ['00350'] = true,\n"
" ['00351'] = true,\n"
" ['00352'] = true,\n"
" ['00353'] = true,\n"
" ['00354'] = true,\n"
" ['00355'] = true,\n"
" ['00356'] = true,\n"
" ['00357'] = true,\n"
" ['00358'] = true,\n"
" ['00359'] = true,\n"
" ['00360'] = true,\n"
" ['00361'] = true,\n"
" ['00362'] = true,\n"
" ['00363'] = true,\n"
" ['00364'] = true,\n"
" ['00365'] = true,\n"
" ['00366'] = true,\n"
" ['00367'] = true,\n"
" ['00368'] = true,\n"
" ['00369'] = true,\n"
" ['00370'] = true,\n"
" ['00371'] = true,\n"
" ['00372'] = true,\n"
" ['00373'] = true,\n"
" ['00374'] = true,\n"
" ['00375'] = true,\n"
" ['00376'] = true,\n"
" ['00377'] = true,\n"
" ['00378'] = true,\n"
" ['00379'] = true,\n"
" ['00380'] = true,\n"
" ['00381'] = true,\n"
" ['00382'] = true,\n"
" ['00383'] = true,\n"
" ['00384'] = true,\n"
" ['00385'] = true,\n"
" ['00386'] = true,\n"
" ['00387'] = true,\n"
" ['00388'] = true,\n"
" ['00389'] = true,\n"
" ['00390'] = true,\n"
" ['00391'] = true,\n"
" ['00392'] = true,\n"
" ['00393'] = true,\n"
" ['00394'] = true,\n"
" ['00395'] = true,\n"
" ['00396'] = true,\n"
" ['00397'] = true,\n"
" ['00398'] = true,\n"
" ['00399'] = true,\n"
" ['00400'] = true,\n"
" ['00401'] = true,\n"
" ['00402'] = true,\n"
" ['00403'] = true,\n"
" ['00404'] = true,\n"
" ['00405'] = true,\n"
" ['00406'] = true,\n"
" ['00407'] = true,\n"
" ['00408'] = true,\n"
" ['00409'] = true,\n"
" ['00410'] = true,\n"
" ['00411'] = true,\n"
" ['00412'] = true,\n"
" ['00413'] = true,\n"
" ['00414'] = true,\n"
" ['00415'] = true,\n"
" ['00416'] = true,\n"
" ['00417'] = true,\n"
" ['00418'] = true,\n"
" ['00419'] = true,\n"
" ['00420'] = true,\n"
" ['00421'] = true,\n"
" ['00422'] = true,\n"
" ['00423'] = true,\n"
" ['00424'] = true,\n"
" ['00425'] = true,\n"
" ['00426'] = true,\n"
" ['00427'] = true,\n"
" ['00428'] = true,\n"
" ['00429'] = true,\n"
" ['00430'] = true,\n"
" ['00431'] = true,\n"
" ['00432'] = true,\n"
" ['00433'] = true,\n"
" ['00434'] = true,\n"
" ['00435'] = true,\n"
" ['00436'] = true,\n"
" ['00437'] = true,\n"
" ['00438'] = true,\n"
" ['00439'] = true,\n"
" ['00440'] = true,\n"
" ['00441'] = true,\n"
" ['00442'] = true,\n"
" ['00443'] = true,\n"
" ['00444'] = true,\n"
" ['00445'] = true,\n"
" ['00446'] = true,\n"
" ['00447'] = true,\n"
" ['00448'] = true,\n"
" ['00449'] = true,\n"
" ['00450'] = true,\n"
" ['00451'] = true,\n"
" ['00452'] = true,\n"
" ['00453'] = true,\n"
" ['00454'] = true,\n"
" ['00455'] = true,\n"
" ['00456'] = true,\n"
" ['00457'] = true,\n"
" ['00458'] = true,\n"
" ['00459'] = true,\n"
" ['00460'] = true,\n"
" ['00461'] = true,\n"
" ['00462'] = true,\n"
" ['00463'] = true,\n"
" ['00464'] = true,\n"
" ['00465'] = true,\n"
" ['00466'] = true,\n"
" ['00467'] = true,\n"
" ['00468'] = true,\n"
" ['00469'] = true,\n"
" ['00470'] = true,\n"
" ['00471'] = true,\n"
" ['00472'] = true,\n"
" ['00473'] = true,\n"
" ['00474'] = true,\n"
" ['00475'] = true,\n"
" ['00476'] = true,\n"
" ['00477'] = true,\n"
" ['00478'] = true,\n"
" ['00479'] = true,\n"
" ['00480'] = true,\n"
" ['00481'] = true,\n"
" ['00482'] = true,\n"
" ['00483'] = true,\n"
" ['00484'] = true,\n"
" ['00485'] = true,\n"
" ['00486'] = true,\n"
" ['00487'] = true,\n"
" ['00488'] = true,\n"
" ['00489'] = true,\n"
" ['00490'] = true,\n"
" ['00491'] = true,\n"
" ['00492'] = true,\n"
" ['00493'] = true,\n"
" ['00494'] = true,\n"
" ['00495'] = true,\n"
" ['00496'] = true,\n"
" ['00497'] = true,\n"
" ['00498'] = true,\n"
" ['00499'] = true,\n"
" ['00500'] = true,\n"
" }\n"
"\n"
" return 42\n"
"end";
static pthread_mutex_t MUTEX = PTHREAD_MUTEX_INITIALIZER;
static lua_State *LUA = NULL;
static int CYCLE = 0;
static void execute()
{
assert(pthread_mutex_lock(&MUTEX) == 0);
if (LUA == NULL) {
LUA = luaL_newstate();
luaL_openlibs(LUA);
assert(luaL_loadbuffer(LUA, SCRIPT, strlen(SCRIPT), "@script") == 0);
assert(lua_pcall(LUA, 0, 0, 0) == 0);
}
lua_getglobal(LUA, "f_foo");
assert(lua_isfunction(LUA, -1));
assert(lua_pcall(LUA, 0, 1, -1) == 0);
lua_pop(LUA, 1);
CYCLE++;
if (CYCLE % 100000 == 0) {
lua_gc(LUA, LUA_GCCOLLECT, 0);
printf("%d> %d KB\n", CYCLE, lua_gc(LUA, LUA_GCCOUNT, 0));
}
assert(pthread_mutex_unlock(&MUTEX) == 0);
}
static void *loop(void *data)
{
while (1) {
execute();
usleep(1000000);
}
return NULL;
}
int main()
{
int i;
pthread_t threads[THREADS];
for (i = 0; i < THREADS; i++) {
assert(pthread_create(&(threads[i]), NULL, loop, NULL) == 0);
}
for (i = 0; i < THREADS; i++) {
assert(pthread_join(threads[i], NULL) == 0);
}
return 0;
}
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment