• Martin Möhrmann's avatar
    runtime: use multiplication with overflow check for makechan · 286c7ae1
    Martin Möhrmann authored
    This improves performance for channels with an element size
    larger than 32 bytes and removes loading a value from the
    maxElems array for smaller element sizes.
    
    MakeChan/Byte       88.8ns ± 6%  85.2ns ± 1%  -4.03%  (p=0.000 n=10+10)
    MakeChan/Int         100ns ± 4%    96ns ± 2%  -3.72%  (p=0.000 n=9+10)
    MakeChan/Ptr         124ns ± 3%   126ns ± 2%    ~     (p=0.068 n=10+10)
    MakeChan/Struct/0   80.5ns ± 2%  80.7ns ± 2%    ~     (p=0.697 n=10+10)
    MakeChan/Struct/32   143ns ± 4%   141ns ± 2%    ~     (p=0.221 n=10+10)
    MakeChan/Struct/40   169ns ± 2%   159ns ± 4%  -6.26%  (p=0.000 n=10+10)
    
    Updates #21588
    
    Change-Id: Ifbf12a5af2f0ec7e1d2241ecfffab020e9abec48
    Reviewed-on: https://go-review.googlesource.com/c/144017Reviewed-by: 's avatarKeith Randall <khr@golang.org>
    286c7ae1
chan.go 19.2 KB