4 ms·
The thing that made me love Golang was the Time channel, where you can have a channel execute a function every X milliseconds, without having to worry about blo
by eddtries 3y ago
The thing that made me love Golang was the Time channel, where you can have a channel execute a function every X milliseconds, without having to worry about blocking threads with time.sleep() etc. It made a lot of stuff I wanted to write so much easier I basically went all in on Go and haven't regretted it.
- joeycumines 3y agoThat one is actually pretty easy in JavaScript - in the past I've implemented the same sort of behavior using async generators. (I also like Go's time.Ticker behavior quite a lot)
- eddtries 3y agoDo you have an example? For my case it was an internal lambda service that could add functions with specific intervals to the time.Ticker match, basically you edit a config to add a path to an executable and an interval and then I added it to my script
- joeycumines 3y agoSure do, I haven't actually used this one (I implemented it just then) but it should do the trick: https://gist.github.com/joeycumines/6206f2a6cd79875c7c16473823ce69de#file-newticker-ts https://gist.github.com/joeycumines/6206f2a6cd79875c7c164738...
- joeycumines 3y agoActually, it was fun, so I've made it into an actual package. The one I slapped together works, but this one is better (fixes issues with actually stopping it properly): https://github.com/joeycumines/generator-ticker https://github.com/joeycumines/generator-ticker On NPM as generator-ticker.
- eddtries 3y agoThanks!
- joeycumines 3y agoAddendum: My first attempt would drift over time, if the receiver was slow. Hurt my head a little, but it's fixed now, and I'm at least moderately confident it's correct - unit tested the behavior step by step using `ts-chan`, actually. Will probably use that test as another example use case.
- penneallagricia 3y agoHow is it different from setInterval in JS?
- vanderZwan 3y agoTechnically speaking? Go has parallelism by default, I suppose. But if your functions take negligible time to execute and the interval is sufficiently large enough then nothing from a user perspective.
- eddtries 3y agoYeah I was designing an internal lambda server so mostly parallelism, all I had to do was have a dynamic match and everything else was out the box for the load I needed
- vanderZwan 3y agoYeah, I'm sure a well-written parallel Rust or C++ program (using just the CPU cores) can do better, but Go really hits a Pareto sweet spot in terms of "effort vs speedup" return on investment.
- eddtries 3y agoI’m not the best systems dev, when I get these options I pick easy!
- deleted 3y ago[deleted]