← Back to context

Comment by spacechild1

4 years ago

But why do you need a seperate process? You can do the same with threads and queues. The only advantage I can think of is sandboxing, i.e. preventing a misbehaving task from taking down your whole app.

Ease of development. Ease of maintenance. Separation of concerns. Just to name a few. For example, one service is for hardware communication. It's job is to communicate with all the various devices, and forward those messages out.

>You can do the same with threads and queues.

Yes, but as OP up the chain mentions, you can simplify by letting the OS handle some of that.

  • > Ease of development. Ease of maintenance. Seperation of concerns.

    I'm not convinced. Managing processes is much more complex than managing threads, particularly if the code should be cross-platform. You need a very good library to hide away all the nasty OS specific details. Same goes for pipes or sockets. Then there is the whole issue of message (de)serialization. I don't see how this can possibly be easier than starting a thread and communicating with concurrent queue.

    I mean, subprocesses certainly have their use cases, but I would never see them as a drop-in replacement for threads.

    > you can simplify by letting the OS handle some of that.

    Processes and threads are both OS resources. For the OS scheduler they are practically equivalent.

    • Consider: what is the easiest way to parallelize GCC to a 32 core system?

      Answer: make -j128.

      Way easier than trying to make every data structure inside of the compiler into a parallel programming model.

      --------

      Process level parallelism is a higher level of thinking. As long as you have spare RAM (and let's be frank, we all have 32GB+ sitting around these days), you can add more and more processes to solve your problem.

      If you are talking data structures and mutexes, you are working at a far more complex layer than what I'm saying for #1.

      ----

      Even completely single threaded code can be run in parallel in many cases in practice, because we have multiple files or other divisions of labor available at the process / user level.

      15 replies →

    • > I'm not convinced.

      Great! Because that's not what I'm trying to do. Figure out what works best for you. We did.

      > particularly if the code should be cross-platform.

      Ours, currently, does not.

      > Then there is the whole issue of message (de)serialization. I don't see how this can possibly be easier than starting a thread and communicating with concurrent queue.

      We develop in C#. All of this is available from MS.

      1 reply →