79 lines
2.0 KiB
Lua
Raw Blame History

This file contains invisible Unicode characters

This file contains invisible Unicode characters that are indistinguishable to humans but may be processed differently by a computer. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

--
-- LAUNCHTEST.LUA Copyright (c) 2007-08, Asko Kauppi <akauppi@gmail.com>
--
-- Tests launching speed of N threads
--
-- Usage:
-- [time] lua -lstrict launchtest.lua [threads] [-libs[=io,os,math,...]]
--
-- threads: number of threads to launch (like: 2000) :)
-- libs: combination of "os","io","math","package", ...
-- just "-libs" for all libraries
--
-- Note:
-- One _can_ reach the system threading level, ie. doing 10000 on
-- PowerBook G4:
-- <<
-- pthread_create( ref, &a, lane_main, data ) failed @ line 316: 35
-- Command terminated abnormally.
-- <<
--
-- (Lua Lanes _can_ be made tolerable to such congestion cases. Just
-- currently, it is not. btw, 5000 seems to run okay - system limit
-- being 2040 simultaneous threads)
--
-- To do:
-- - ...
--
local N= 1000 -- threads/loops to use
local M= 1000 -- sieves from 1..M
local LIBS= nil -- default: load no libraries
local function HELP()
io.stderr:write( "Usage: lua launchtest.lua [threads] [-libs[=io,os,math,...]]\n" )
exit(1)
end
local m= require "argtable"
local argtable= assert(m.argtable)
for k,v in pairs( argtable(...) ) do
if k==1 then N= tonumber(v) or HELP()
elseif k=="libs" then LIBS= (v==true) and "*" or v
else HELP()
end
end
require "lanes"
local g= lanes.gen( LIBS, function(i)
--io.stderr:write( i.."\t" )
return i
end )
local t= {}
for i=1,N do
t[i]= g(i)
end
if false then
-- just finish here, without waiting for threads to finish
--
local st= t[N].status
print(st) -- if that is "done", they flew already! :)
else
-- mark that all have been launched, now wait for them to return
--
io.stderr:write( N.." lanes launched.\n" )
for i=1,N do
local rc= t[i]:join()
assert( rc==i )
end
io.stderr:write( N.." lanes finished.\n" )
end