←back to thread

304 points zdw | 3 comments | | HN request time: 0.501s | source
Show context
geocar ◴[] No.44500592[source]
> There’s a lot to the story that’s obviously made up...

Obviously? I think I've had this phone call myself a few times, although in my experience it was never from a statistician and they didn't give me as much data, but I'm pretty sure the story is mostly accurate.

> I think this is nonsense... why would an invalid or incomplete sendmail configuration default to three milliseconds?

This is a wonderful question, and perhaps much more interesting than anything else in the page, but first, let's reproduce the timing;

My desktop, a 2017 Xeon E7-8880 (144 cores of 2.3ghz; 1tb ram) with a load of 2.26 at this moment:

    $ time sleep 0.001
    real    0m0.004s
    user    0m0.001s
    sys     0m0.003s
On my i9-10900k (3.7ghz) current load of 3,31:

    $ time sleep 0.001

    real    0m0,002s
    user    0m0,000s
    sys     0m0,001s
(In case you think I'm measuring exec; time /bin/echo returns 0's on both machine)

Now as to why this is? Well in order to understand that, you need to understand how connect() actually works, and how to create a timeout for connect(). Those skilled in the art know you've got a number of choices on how to do it, but they all involve multiple steps because connect() does not take a timeout as an argument. Here's one way (not too different than what sendmail does/did):

    fcntl(f,F_SETFL,O_NONBLOCK);
    if(-1==connect(f,...)&&errno==EWOULDBLOCK){
      fd_set a;FD_ZERO(&a);FD_SET(f,&a);
      if(!select(f+1,&a,&a,NULL,{.tv_sec=0,.tv_usec=0})) {
        close(f);return error;
      }
    }
If you read this carefully, you only need to ask yourself how much time can pass between the top of connect() and the bottom of select(), and if you think it is zero like tedu does, you might probably have the same surprise: Computers are not abstract machines, but made out of matter and powered by energy and thus subject to the laws of physics, and so everything takes time.

For others, the surprise might be that it's still 3msec over twenty years later, and I think that is a much more interesting subject to explore than whether the speed of light exists.

replies(4): >>44500694 #>>44501119 #>>44501631 #>>44502904 #
MadnessASAP ◴[] No.44501119[source]
> 144 cores of 2.3ghz; 1tb ram

I can't help but feel that's somewhat excessive for a desktop. Have you considered closing a few browser tabs?

replies(1): >>44501808 #
1. geocar ◴[] No.44501808[source]
> I can't help but feel that's somewhat excessive for a desktop.

I got it on ebay for €2k. You can't not expect me to use it as a desktop.

> Have you considered closing a few browser tabs?

No? I mean actually no: I made a brotab+wofi script that allows me to search tabs, and I find it a lot more convenient than bookmarks.

Here's the relevant bits:

    brotab_filter='{
     split($1,A,".");
     t=$2;
     gsub(/&/,  "\\&amp;",t); gsub(/</,  "\\&lt;",t); gsub(/>/,  "\\&gt;",t);
     print "<span size=\"xx-small\">"A[1]"."A[2]"</span><span size=\"xx-small\">."A[3]"</span> <span weight=\"bold\">Firefox</span> <span>"t"</span>"
    }';

    ( # more stuff is in here
    brotab list | awk -F" " "$brotab_filter" ) | \
    wofi -m --insensitive --show dmenu --prompt='Focus a window' | sed -e 's/<[^>]*>//g' | {
     read -r id name || exit 1
     case "$id" in
     exec) exec "$name" ;;
     [0-9]*)   swaymsg "[con_id=$id]" focus ;;
     [a-z]\.*)
      brotab activate "$id"; sleep 0.2;
      swaymsg "[title=\"${name#Firefox }\"]" focus
      ;;
     esac
    }
Works fine on 19,294 tabs at the moment...
replies(2): >>44503563 #>>44508335 #
2. lazide ◴[] No.44503563[source]
I think I love you.
3. hhh ◴[] No.44508335[source]
Jesus christ