Working on 16.0.0 #53
@ -85,7 +85,7 @@ Allows the user to have multi auto set priorities (Requires chronos). Also adds
|
||||
Added
|
||||
---
|
||||
- thread.defer(func) -- When using a co-routine thread or co-routine threaded function, defer will call it's function at the end of the the threads life through normal execution or an error. In the case of a function, when the function returns or errors.
|
||||
- multi:setTaskDelay(delay), Tasks which are now tied to a processor can have an optional delay between the execution between each task. Useful perhaps for rate limiting. Without a delay all grouped tasks will be handled in one step.
|
||||
- multi:setTaskDelay(delay), Tasks which are now tied to a processor can have an optional delay between the execution between each task. Useful perhaps for rate limiting. Without a delay all grouped tasks will be handled in one step. `delay` can be a function as well and will be processed as if thread.hold was called.
|
||||
- processor's now have a boost function which causes it to run its processes the number of times specified in the `boost(count)` function
|
||||
- thread.hold will now use a custom hold method for objects with a `Hold` method. This is called like `obj:Hold(opt)`. The only argument passed is the optional options table that thread.hold can pass. There is an exception for connection objects. While they do contain a Hold method, the Hold method isn't used and is there for proxy objects, though they can be used in non proxy/thread situations. Hold returns all the arguments that the connection object was fired with.
|
||||
- shared_table = STP:newSharedTable(tbl_name) -- Allows you to create a shared table that all system threads in a process have access to. Returns a reference to that table for use on the main thread. Sets `_G[tbl_name]` on the system threads so you can access it there.
|
||||
|
||||
40
init.lua
40
init.lua
@ -189,6 +189,7 @@ local optimization_stats = {}
|
||||
local ignoreconn = true
|
||||
local empty_func = function() end
|
||||
function multi:newConnection(protect,func,kill)
|
||||
local processor = self
|
||||
local c={}
|
||||
local lock = false
|
||||
local fast = {}
|
||||
@ -380,7 +381,7 @@ function multi:newConnection(protect,func,kill)
|
||||
end
|
||||
if kill then
|
||||
table.insert(kills,i)
|
||||
multi:newTask(function()
|
||||
processor:newTask(function()
|
||||
for _, k in pairs(kills) do
|
||||
table.remove(kills, _)
|
||||
table.remove(fast, k)
|
||||
@ -418,7 +419,7 @@ function multi:newConnection(protect,func,kill)
|
||||
fast[i](...)
|
||||
if kill then
|
||||
table.insert(kills,i)
|
||||
multi:newTask(function()
|
||||
processor:newTask(function()
|
||||
for _, k in pairs(kills) do
|
||||
table.remove(kills, _)
|
||||
table.remove(fast, k)
|
||||
@ -1147,14 +1148,29 @@ function multi:newProcessor(name, nothread, priority)
|
||||
|
||||
function c:boost(count)
|
||||
boost = count or 1
|
||||
if boost > 1 then
|
||||
self.run = function()
|
||||
if not Active then return end
|
||||
for i=1,boost do
|
||||
c:uManager(true)
|
||||
handler()
|
||||
end
|
||||
return c
|
||||
end
|
||||
else
|
||||
self.run = function()
|
||||
if not Active then return end
|
||||
c:uManager(true)
|
||||
handler()
|
||||
return c
|
||||
end
|
||||
end
|
||||
end
|
||||
|
||||
function c.run()
|
||||
if not Active then return end
|
||||
for i=1,boost do
|
||||
c:uManager(true)
|
||||
handler()
|
||||
end
|
||||
c:uManager(true)
|
||||
handler()
|
||||
return c
|
||||
end
|
||||
|
||||
@ -1178,7 +1194,11 @@ function multi:newProcessor(name, nothread, priority)
|
||||
end
|
||||
|
||||
function c:setTaskDelay(delay)
|
||||
task_delay = tonumber(delay) or 0
|
||||
if type(delay) == "function" then
|
||||
task_delay = delay
|
||||
else
|
||||
task_delay = tonumber(delay) or 0
|
||||
end
|
||||
end
|
||||
|
||||
c:newThread("Task Handler", function()
|
||||
@ -1193,7 +1213,7 @@ function multi:newProcessor(name, nothread, priority)
|
||||
thread.hold(task_holder)
|
||||
end
|
||||
if task_delay~=0 then
|
||||
thread.sleep(task_delay)
|
||||
thread.hold(task_delay)
|
||||
end
|
||||
end
|
||||
end).OnError(multi.error)
|
||||
@ -2481,12 +2501,14 @@ function multi.success(...)
|
||||
io.write("\x1b[92mSUCCESS:\x1b[0m " .. table.concat(t," ") .. "\n")
|
||||
end
|
||||
|
||||
-- Old things for compatability
|
||||
multi.GetType = multi.getType
|
||||
multi.IsPaused = multi.isPaused
|
||||
multi.IsActive = multi.isActive
|
||||
multi.Reallocate = multi.Reallocate
|
||||
multi.Reallocate = multi.reallocate
|
||||
multi.ConnectFinal = multi.connectFinal
|
||||
multi.ResetTime = multi.SetTime
|
||||
multi.setTime = multi.SetTime
|
||||
multi.IsDone = multi.isDone
|
||||
multi.SetName = multi.setName
|
||||
|
||||
|
||||
@ -66,7 +66,6 @@ function multi:newSystemThread(name, func, ...)
|
||||
THREAD = THREAD,
|
||||
THREAD_NAME = tostring(name),
|
||||
__THREADNAME__ = tostring(name),
|
||||
test = "testing",
|
||||
THREAD_ID = id,
|
||||
thread = thread,
|
||||
multi = multi,
|
||||
|
||||
@ -60,6 +60,7 @@ function multi:newProxy(list)
|
||||
return res
|
||||
end
|
||||
if not(self.is_init) then
|
||||
THREAD.sleep(.3)
|
||||
self.is_init = true
|
||||
local multi, thread = require("multi"):init()
|
||||
self.proxy_link = "PL" .. multi.randomString(12)
|
||||
@ -92,8 +93,6 @@ function multi:newProxy(list)
|
||||
local sref = table.remove(data, 1)
|
||||
local ret
|
||||
|
||||
print(_G[list[0]], func)
|
||||
|
||||
if sref then
|
||||
ret = {_G[list[0]][func](_G[list[0]], multi.unpack(data))}
|
||||
else
|
||||
@ -120,6 +119,7 @@ function multi:newProxy(list)
|
||||
end)
|
||||
return self
|
||||
else
|
||||
THREAD.sleep(.3)
|
||||
local function copy(obj)
|
||||
if type(obj) ~= 'table' then return obj end
|
||||
local res = {}
|
||||
@ -145,7 +145,6 @@ function multi:newProxy(list)
|
||||
setmetatable(v[2],getmetatable(multi:newConnection()))
|
||||
else
|
||||
self[v] = thread:newFunction(function(self,...)
|
||||
multi.print("Pushing: " .. v)
|
||||
if self == me then
|
||||
me.send:push({v, true, ...})
|
||||
else
|
||||
@ -192,9 +191,6 @@ function multi:newProxy(list)
|
||||
THREAD = multi.integration.THREAD
|
||||
end
|
||||
local proxy = THREAD.waitFor(self.proxy_link)
|
||||
for i,v in pairs(proxy) do
|
||||
print("proxy",i,v)
|
||||
end
|
||||
proxy.funcs = self.funcs
|
||||
return proxy:init()
|
||||
end
|
||||
|
||||
@ -1,6 +1,6 @@
|
||||
package.path = "../?/init.lua;../?.lua;"..package.path
|
||||
-- require("runtests")
|
||||
-- require("threadtests")
|
||||
require("runtests")
|
||||
require("threadtests")
|
||||
-- Allows you to run "love tests" which runs the tests
|
||||
|
||||
multi, thread = require("multi"):init()
|
||||
|
||||
@ -175,7 +175,7 @@ runTest = thread:newFunction(function()
|
||||
end
|
||||
if not love then
|
||||
local ec = 0
|
||||
if _VERSION == "5.1" then
|
||||
if _VERSION == "Lua 5.1" then
|
||||
multi.print("Testing pseudo threading")
|
||||
_, str, ecc = os.execute("lua tests/threadtests.lua p")
|
||||
ec = ec + ecc
|
||||
@ -185,14 +185,17 @@ runTest = thread:newFunction(function()
|
||||
if ec ~= 0 then
|
||||
os.exit(1)
|
||||
end
|
||||
os.exit(0)
|
||||
else
|
||||
multi.print("Testing pseudo threading")
|
||||
ec = ec + os.execute("lua tests/threadtests.lua p")
|
||||
multi.print("Testing lanes threading")
|
||||
ec = ec + os.execute("lua tests/threadtests.lua l")
|
||||
multi:Stop()
|
||||
if ec ~= 0 then
|
||||
os.exit(1)
|
||||
end
|
||||
os.exit(0)
|
||||
end
|
||||
end
|
||||
end)
|
||||
|
||||
@ -1,5 +1,8 @@
|
||||
package.path = "../?/init.lua;../?.lua;"..package.path
|
||||
multi, thread = require("multi"):init{print=true,warn=true,debugging=true}
|
||||
for i,v in pairs(thread) do
|
||||
print(i,v)
|
||||
end
|
||||
-- require("multi.integration.priorityManager")
|
||||
|
||||
-- multi.debugging.OnObjectCreated(function(obj, process)
|
||||
@ -267,3 +270,32 @@ multi:mainloop()
|
||||
-- end)
|
||||
|
||||
-- multi:mainloop()
|
||||
--[[
|
||||
newFunction function: 0x00fad170
|
||||
waitFor function: 0x00fad0c8
|
||||
request function: 0x00fa4f10
|
||||
newThread function: 0x00fad1b8
|
||||
--__threads table: 0x00fa4dc8
|
||||
defer function: 0x00fa4f98
|
||||
isThread function: 0x00facd40
|
||||
holdFor function: 0x00fa5058
|
||||
yield function: 0x00faccf8
|
||||
hold function: 0x00fa51a0
|
||||
chain function: 0x00fa5180
|
||||
__CORES 32
|
||||
newISOThread function: 0x00fad250
|
||||
newFunctionBase function: 0x00fad128
|
||||
requests table: 0x00fa4e68
|
||||
newProcessor function: 0x00fad190
|
||||
exec function: 0x00fa50e8
|
||||
pushStatus function: 0x00fad108
|
||||
kill function: 0x00faccd8
|
||||
get function: 0x00fad0a8
|
||||
set function: 0x00fad088
|
||||
getCores function: 0x00facd60
|
||||
skip function: 0x00faccb0
|
||||
--_Requests function: 0x00fa50a0
|
||||
getRunningThread function: 0x00fa4fb8
|
||||
holdWithin function: 0x00facc80
|
||||
sleep function: 0x00fa4df0
|
||||
]]
|
||||
@ -146,7 +146,7 @@ multi:newThread("Scheduler Thread",function()
|
||||
local stp = multi:newSystemThreadedProcessor(5)
|
||||
|
||||
local tloop = stp:newTLoop(function()
|
||||
print("Test")
|
||||
--print("Test")
|
||||
end, 1)
|
||||
|
||||
multi:newSystemThread("Testing proxy copy THREAD",function(tloop)
|
||||
@ -157,11 +157,11 @@ multi:newThread("Scheduler Thread",function()
|
||||
thread:newThread(function()
|
||||
while true do
|
||||
thread.hold(tloop.OnLoop)
|
||||
print(THREAD_NAME,"Loopy")
|
||||
--print(THREAD_NAME,"Loopy")
|
||||
end
|
||||
end)
|
||||
tloop.OnLoop(function(a)
|
||||
print(THREAD_NAME, "Got loop...")
|
||||
--print(THREAD_NAME, "Got loop...")
|
||||
end)
|
||||
multi:mainloop()
|
||||
end, tloop:getTransferable())
|
||||
@ -183,12 +183,12 @@ multi:newThread("Scheduler Thread",function()
|
||||
thread:newThread(function()
|
||||
while true do
|
||||
thread.hold(tloop.OnLoop)
|
||||
print(THREAD_NAME,"Local Loopy")
|
||||
--print(THREAD_NAME,"Local Loopy")
|
||||
end
|
||||
end)
|
||||
|
||||
tloop.OnLoop(function()
|
||||
print("OnLoop",THREAD_NAME)
|
||||
--print("OnLoop",THREAD_NAME)
|
||||
end)
|
||||
|
||||
t, val = thread.hold(function()
|
||||
|
||||
Loading…
x
Reference in New Issue
Block a user