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)?

Reply via email to