On Thu, Jan 5, 2017 at 9:51 AM,  <zohai...@gmail.com> wrote:
> Hey guys,
>
>  So for some time now I have been trying to build a high performance Pub/Sub
> server in Go. I am using gorilla websocket library, which in it self has a
> Read, Write methods
> (https://godoc.org/github.com/gorilla/websocket#Conn.ReadMessage) that will
> block my current routine. In order to continuously listen to messages coming
> from client I spin off a go routine, reading from socket and pushing
> messages over a channel. Which I in-turn can use for doing select { } in
> another go routine. When I testing this thing for scaling, I just wrote some
> test code and turns out spinning off 1M go routines (doing nothing) results
> in ~8GB of memory usage on my windows machine.

You should compare this with a simple C program using epoll, you'll
find that maintaining a 1M connections uses quite a lot of memory.

>These go routines are doing
> nothing (sleeping) and it requires this much memory; which forced me to ask
> if I can multiplex such blocking calls on a single go routine. If I can do
> so I can spin off something like 1000 go routines and each one of them
> multiplexing 1000 connections (which in theory should require lesser memory
> that what I am currently getting).

But a real program won't holding 1M connections and doing nothing with them.
The cost of processing requests from those connections will be much
larger than the cost of a goroutine.


>  Any ideas how can one call muiltple socket reads (something like event
> loop) on single go routine.

There really isn't a way, The net package already provides a
lightweight way to maintain larger numbers of connections using
goroutines.


> Disclaimer: I know event loop may sound against the golang philosophy but I
> see no reason to pay such huge memory cost when most of them will be idle,
> waiting for something to come from user.

I think you're underestimating the memory cost of simply having 1M connections.

-- 
You received this message because you are subscribed to the Google Groups 
"golang-nuts" group.
To unsubscribe from this group and stop receiving emails from it, send an email 
to golang-nuts+unsubscr...@googlegroups.com.
For more options, visit https://groups.google.com/d/optout.

Reply via email to