NIO+Multithreaded TCPSocket listener, very low cpu utilisation

kdevel kdevel at vogtner.de
Fri Nov 17 14:54:21 UTC 2017


On Friday, 17 November 2017 at 14:28:38 UTC, kdevel wrote:
> On Thursday, 16 November 2017 at 19:37:31 UTC, ade90036 wrote:
>> Can we enable some sort of profiling to see what is going on?
>
> You may compile the code with dmd -g -O -profile -profile=gc
>
> I currently struggle getting meaningful output. I want to 
> terminate the program after a number (say 400) handled 
> requests. When returning from main the program hangs, so I call 
> exit.

This works:

```
                    if (++accept_cnt > 400) {
                       writeln ("returning");
                       taskPool.stop;
                       return;
                    }
```

> I see the invocations [of the socket allocation wrapper] in 
> handle_socket in
> the console but not in trace.log.

Now they are in trace.log. Also I see this:

---
   Num          Tree        Func        Per
   Calls        Time        Time        Call
[...]
     399    14948526    11824366       29635     void 
httpdtasks.handle_socket(std.socket.Socket)
---

30 milliseconds for handle_socket while the client side (Firefox) 
reports <= 1 ms. What does this mean?

There is another point that bothers me: In each handle_socket 
invocation a new SocketSet is created. How can this allocation be 
done once per thread (thread local storage)?


More information about the Digitalmars-d-learn mailing list