Skip to content
HomeVideosBooksBlogs
AllTop postsTopics
Podcasts
HistoryListsWatch laterLiked videosFollowing

The videos, books, blogs and podcasts Hacker News keeps recommending, all in one place.

VideosBooksBlogsPodcastsAboutPrivacySettings

Data from Hacker News, HackerTube, HackerBooks, HackerBlogs and Open Library. Credits · Not affiliated with Y Combinator.

HomeVideosBooksBlogsPodcasts
Ctrl K
    M

    Marc Gravell

    blog.marcgravell.com · Personal blog · on HN since 2014

    Marc Gravell, a .NET developer known for work at Stack Overflow, writes about performance, .NET IO pipelines, and CUDA from C#.

    Visit blogHN submissions
    Systems & PerformanceProgrammingLanguages & Compilers
    What HN says

    HN links it for his .NET Pipelines series, his CUDA rewrite of Stack Overflow's tag engine, and a post on GC pauses.

    Stats for nerds
    28HN people shared it
    31linked in comments
    442story points
    Sep 2020last shared
    2016people per year2020

    Top posts on HN

    1. 1
      Pipelines – a guided tour of the new IO API in .NET
      2 people · 286 points · first shared 2018 · 26 comments on HN
    2. 2
      .NET Core, .NET 5; the Exodus of .NET Framework?
      3 people · 60 points · first shared 2020 · 25 comments on HN
    3. 3
      How I Found CUDA, Or: Rewriting the Tag Engine
      2 people · 49 points · first shared 2016 · 14 comments on HN
    4. 4
      Is the era of reflection-heavy C# libraries at an end?
      2 people · 11 points · first shared 2021 · 1 comments on HN
    5. 5
      Pipelines – a guided tour of the new IO API in .NET (part 2)
      2 people · 6 points · first shared 2018 · Discussion on HN
    6. 6
      Fun with the Spiral of Death
      3 people · 4 points · first shared 2019 · Discussion on HN
    7. 7
      CUDA–getting started in .NET
      2 people · 4 points · first shared 2016 · 1 comments on HN
    8. 8
      Is the era of reflection-heavy C# libraries at an end?
      1 person · 3 points · first shared 2021 · 1 comments on HN
    9. 9
      The Road to DNX – Part 1
      2 people · 2 points · first shared 2015 · Discussion on HN
    10. 10
      .NET Spans (Bounded and Type-Safe Pointers)
      1 person · 2 points · first shared 2017 · 1 comments on HN

    What HN people wrote when they linked it

    • GroxxOct 2018

      Select is a bit less common (at least in use) from what I've seen, yea... until you start looking at Promises and Rx. Then it's absolutely everywhere, e.g. `Promise.race(futures...)` (which trivially handles a flexible length of futures, unlike select) or any merging operator in Rx. More often though I see code waiting on all rather than any, and Go doesn't seem to change that.

      Channels though are everywhere, and sample code tends to look almost exactly like introductory Go stuff[1] - Java has multiple BlockingQueues which serve the same purpose as a buffered channel, and SynchronousQueue is a non-buffered one. Though they don't generally include the concept of "close"...

      But streams do have the "close" concept in nearly all cases, and streams are all over the place in many many forms, and have been for a long time. They generally replace both select and channels, but are usually much easier to use IMO (e.g. `stream.map(i -> i.string())` vs two channels + for/range/don't forget to safely close it or you leak a goroutine). Some of that is due to generics though.

      [1]: https://docs.oracle.com/javase/7/docs/api/java/util/concurrent/BlockingQueue.html

      ---

      some alternate stream concepts are super interesting too, e.g. .NET's new pipelines: https://blog.marcgravell.com/2018/07/pipe-dreams-part-1.html

    • paulstovellMar 2016

      We put an explanation here (hope it's OK to post the link):

      https://octopus.com/blog/build-your-binaries-once

      A real world example of this is that when .NET 4.5 shipped, the compilers in .NET 4.5 for 4.0 code produced different output than the .NET 4.0 compilers would have. So installing a system-level update on Windows on a build server would mean Test and Production got different results:

      http://blog.marcgravell.com/2012/09/iterator-blocks-missing-methods-and-net.html

      Also, releases move through environments at different times:

      Monday: 1.0 goes to Test

      Tuesday: 1.1 goes to Test

      Wednesday: 1.0 goes to Prod

      Between 1.0 and 1.1, perhaps you updated Node, or went to Python3 - so your build server had to be updated. Reproducing Monday's build is going to be more difficult the more time that goes by.

      As you said, truly reproducible builds are hard. Why not just zip the artifacts and use the same files, instead of rebuilding?

    • deanward81May 2017

      At the time the algorithm was running on one of the servers in the data centre and until recently we didn't have anything in the DC kitted out with GPUs (see http://blog.marcgravell.com/2016/05/how-i-found-cuda-or-rewriting-tag.html for the reason behind that).

      I'm not sure if we're planning to use GPUs for future iterations of algorithm testing; the GPUs are installed in hardware serving production traffic so it's unlikely to be used for experimental stuff like this. That said, a bunch of us just got Dell XPS-15s with the NVIDIA GTX 1050 so we can probably have a go on our local machines to get a feel for performance characteristics... watch this space, I guess!

    • moominJun 2017

      It's important if you care about GC pauses (which you will eventually). Take a look at this report from the .NET based stack overflow guys: http://blog.marcgravell.com/2011/10/assault-by-gc.html?m=1

      Note that they solved their problems using exactly the features being added in Java 9.

    • jsingletonMay 2016

      Code is here: https://github.com/mgravell/SimpleCUDAExample

      Previous articles:

      Part 1: http://blog.marcgravell.com/2016/05/how-i-found-cuda-or-rewriting-tag.html

      Part 2: http://blog.marcgravell.com/2016/05/how-i-found-cuda-or-rewriting-tag_9.html

    • j_sJun 2016

      The following blog series may provide additional insight into the process of applying CUDA to existing code:

      http://blog.marcgravell.com/2016/05/cudagetting-started-in-net.html

    Related

    Microsoft TechNet Blogsblogs.technet.microsoft.com284 people

    Making SQL Server run on Linux

    Microsoft TechNet Blogs
    Company · last shared 2020
    Michael's Coding Spotmichaelscodingspot.com18 people

    Where did the Microsoft tech stack disappear?

    Michael's Coding Spot
    Personal · last shared 2024
    Alexandre Mutelxoofx.com17 people

    Porting the Unity Engine to .NET CoreCLR

    Alexandre Mutel
    Personal · last shared 2024
    Marc Brookerbrooker.co.za204 people

    It's always TCP_NODELAY

    Marc Brooker
    Personal · last shared 2026
    Hillel Waynehillelwayne.com294 people

    1/0 = 0

    Hillel Wayne
    Personal · last shared 2026
    Matt Warrenmattwarren.org49 people

    Adding a new Bytecode instruction to the .NET runtime

    Matt Warren
    Personal · last shared 2023
    Marc Bevandblog.zorinaq.com91 people

    Windows NT Kernel Contributor Explains Why Performance is Behind Other OS

    Marc Bevand
    Personal · last shared 2026
    Random ASCIIrandomascii.wordpress.com274 people

    There are only four billion floats, so test them all (2014)

    Random ASCII
    Personal · last shared 2026