a difference of microseconds has no effect
being the same speed as anything else is not a selling point (your only selling point)
not saying this is useless but you cant just say “mine is wayyyy better” with such a miniscule difference that is doesnt matter
“difference” means it has an effect. I’m assuming what you mean is that the effect is so small, that it doesn’t really matter.
I never said “mine is wayyyy better”. You’re quoting things that was never said.
People asked for a benhcmark, I provided one, and the results were that mine was faster (over 2x faster in some areas, which while in microseconds, is a big difference percent-wise).
The fact is that mine is faster. Better is a different thing, but since mine has (i think) the same features, and also has full typing and custom types, you could argue that it’s “better”.
I advertise it as fast and optimized, because it is.
Please stop replying to these people, there is literally no point in arguing with them, they are not going to change and they are not criticizing your work in good faith either.
Like this is the type of replies they bring up in a serious argument.
I am starting to believe this guy is trolling too, Don’t waste your time.
I am going to try this module out soon. Cannot wait.
Will report back with what I think
Its okay, but good job on making it though.
edit: after the recent version 2.7 I would say its pretty good. Nice resource.
cool, i made this ultimate benchmark to LemonSignal on --!optimize 2
mode in Studio using Benchmarker.
LemonSignal
known better than GoodSignal & FastSignal.
:Fire
1e3 iterations with 1 argument & 10 connections.
1e4 iterations with 1 argument & 10 connections.
Very cool, I will definitely use it.
Version 2.7.0
Removed features:
- Removed
.Connected
property, improving speed.
Changes & fixes:
- Removed
--!native
because I found out it decreases speed in this case. - Heavily simplified linked list logic, improving speed.
- Swapped number-keys out for string-keys, as to avoid mixed-tables, improving speed and readability.
- No longer stores the connection metatable, improving speed.
- Now unlinks metatable instead of overriding with a no-op function.
- Now passes already-cached thread to
reusableThreadCall
, avoidingcoroutine.running()
. - No longer uses thread immediately, because it’s actually slightly faster to resume once.
- Fixed an error that would occur when a thread calling
:Wait()
is resumed before fire. - Comment changes and additions.
- Changed class names to PascalCase.
- Minor variable renamings.
How do you create such benchmark screens? Where you can compare and contrast functions and stuff?
He’s using a plugin by BoatBomber; Benchmarker.
It’s not free but it’s just $5.00 and you’ll have it forever.
This is hot
Cannot wait to download this version and give it a go!
Looking good so far, thanks for all you do
Version 2.8.0
Changes & fixes:
- New thread storage logic, improving fire speed by a lot.
- Minor comment changes and additions.
Vro forgor to give me credit
No, it’s at the bottom of the topic post.
Ahh alright my bad //30charlimit
Hi, i think there still an issue
I just tested out 2.8.0 with the new thread storage, and it’s still suffering from slow fire times
Could it be the bottleneck isn’t storage at all?
When optimizing SimpleSignal, I noticed usage of task.spawn
outside of creating the thread at the start led to significantly slower fire times, could be a lead
It might be your benchmark then.
I’ll benchmark once BoatBomber fixes his Benchmarker plugin — yea after 7 major releases it’s still buggy.
Hi, changing task.spawn
to coroutine.resume
in :Fire()
fixed the issue
I don’t know why but it seems like the coroutine library is much faster at resuming/closing threads, atleast in this case
(Note that my way of benchmarking fluctuates wildly, benchmarker would be the best way to measure this)
(Also if you don’t mind can you make my credit in the post bigger :3 )
I do know that it’s faster, but I didn’t know the difference was this big.
The thing is, with coroutine.resume
you don’t get proper error outputs.
Since coroutine.resume() returns a boolean indicating success and a message (similar to pcall), you can just detect if that’s false and error manually :V