Here are a few references: https://github.com/puma/puma/issues/1003 https://thoughtbot.com/blog/untangling-ruby-threads
Edit: your links show that indeed its blocking and you need to spawn many threads/instances, which use memory.
"The reason for that is waiting on IO (talking to a DB, etc) will allow another thread to run"
The threads don't run in parallel, but they do run concurrently. While this isn't the panacea of performance, it does work well with many web apps which tend to be I/O bound (waiting for a database or remote service). So to your original of "Doing a http request or a sql query blocks everything until it finishes. The solution is to spawn many instances" - an HTTP request or SQL query will, in fact, allow other threads to execute while waiting for a response meaning you can rely on threads, rather than instances, and maintain a very low memory footprint.
If you like Ruby but want true multi-threading and parallelism, I'd highly recommend taking a look at JRuby (https://www.jruby.org). Those guys have done an incredible job with it.
How would a SQL query block other threads? Sincere question
I use rubymine and the debugger has truly spoiled me.
I tried to get the debugger going with a third party plugin for Intelli-j but it would crash when inspecting variables.
Any tips?
The experience is terrible: Tooling (editor plugins, tests runners, IDEs (oh, there are no IDEs...), debugging) is like going back 20 years.
There are no libraries for the most basic stuff you get almost by default on the Ruby, Python, Node or Java ecosystems. So we end up reinventing half assed solutions to anything we need to do.
Some days I think we would be sooo much better by just using Rails or Django.
Of course, concurrency and the Erlang VM are awesome and the perfect fit for the web... if your problem is performance, it will solve that problem for you of course... other than that, is all wasted time in my opinion from my experience after years of using it.
The latest incarnation of this problem, was when we had to validate RUT codes (a tax code with a checksum we use here in Chile). Options for Python [1], options for Node [2], options for elixir [3] (don't mind to click, it's a list with nothing to do with RUTs or modulo11 validations). So we had to implement it ourselves. Looking for information we found example implementations [4], where as you can see you have example implementations even for Asterisk Dialplans (!!) but no mention of Elixir.
[1] https://pypi.org/search/?q=rut [2] https://www.npmjs.com/search?q=rut [3] https://hex.pm/packages?search=rut&sort=recent_downloads [4] https://es.wikipedia.org/wiki/Anexo:Implementaciones_para_al...
There are many more examples. Of course you get libraries for the "standard" stuff, it is when you get into the detailes, and that happens when you are already too deep into your project, that you realise all the missing pieces.
Also, what code editor do you use? we've tried everything, and seems the best option is you grow a beard and go emacs/vim. The VSCode plugins hog your laptop and are really inconsistent, incomplete and sluggish [1] [2].
[1] https://github.com/JakeBecker/elixir-ls/issues/54 [2] https://github.com/elixir-lsp/elixir-ls/issues/96
Of course there is no IDE similar to intellij, rubymine or pycharm.
I've had good luck with VSCode but I've never really been an IDE user (even with Ruby) so I can't comment much on that.
I can’t say it’s anything other than the fault of not enough spare time. The community is a bit smaller so there are not as many volunteers to build out the latest and greatest tooling for editor support.
Despite this, I’ve had a wonderful experience working within the elixir ecosystem and using it as a gateway to erlang. One of the things I had to acknowledge was my bias towards recent updates as a measure of quality. The ecosystem is so good that you’ll find packages years old and never updated. It simply does that it does and does it well.
I found overall great support in VS Code at the end of the day for Elixir. I wanted it to work well with emacs but it wasn’t consistently enjoyable.
VS Code works well enough for now between the satisfaction of shipping code and the satisfaction of a flick of the wrist for editor commands.