3 ms·
Ask HN: How to learn concurrency?
Race condition, producer consumer, and cool stuffs like that? I do java
- scorpioxy 11mo agoThat's a huge topic but I would say implement a hobby project and learn by doing. Pick something you're interested in and start writing code to exercise the theoretical concepts. A small piece of advice is to make sure you're motivated before diving in. Debugging a race condition, just as an example, can be quite involved and consume a lot of your time and energy to even reproduce.
- ykonstant 11mo agoBut what is a good hobby project with a strong focus on concurrency that will not swamp a beginner to this topic?
- peauc 11mo agoI started by writing a user interface that handled they keyboard events in a thread and communicated to the main thread using a message queue. IMO that's a good easy first step :)
- nrhrjrjrjtntbt 11mo agoTry making a trading order book system. Maybe in Go where they have made concurrency easier than other languages.
- sigmaprimus 11mo agoBrilliant.org?
- Rendello 11mo agoEverything I know is from desperately trying to parallelize my TIS-100 solutions.
- serendipty01 11mo agohttps://deadlockempire.github.io/ https://deadlockempire.github.io/ https://thecomputersciencebook.com/book/concurrent-programming/ https://thecomputersciencebook.com/book/concurrent-programmi...
- pestatije 11mo agohttps://docs.oracle.com/en/java/javase/25/core/concurrency.html https://docs.oracle.com/en/java/javase/25/core/concurrency.h...
- Pooge 11mo agoJava Concurrency in Practice[1] has always been recommended by my colleagues. I'm about halfway through it and I think it makes the concepts pretty clear. Even if you move away from Java one day, I think the investment is not lost at all. Then you could ask your favorite LLM to create concurrency exercises once in a while to practice. [1]: ISBN 978-0321349606
- propablythrown 11mo ago[flagged]
- netsharc 11mo agoOr an LLM... Curious how this stackoverflow-first-grader question isn't flagged to death.
- propablythrown 11mo agoPeople in the comments wish to provide assistance and share their experience, clearly missing the fact that the person asking didn't even bother to do a simple search first.
- liampulles 11mo agoSomething I've built for myself (in Go) that has been extremely useful is a lib to read a CSV that delegates to n concurrent workers. Maybe that is a good side project.
- throwaway81523 11mo agoRead a book about OS's I guess. This should be good, an update of an earlier good book: https://www.os-book.com/OS10/ https://www.os-book.com/OS10/ There was a Java-specific edition: https://www.os-book.com/OS8/os8j/index.html https://www.os-book.com/OS8/os8j/index.html
- rramadass 11mo ago1) Foundations of Multithreaded, Parallel, and Distributed Programming by Gregory Andrews - https://www2.cs.arizona.edu/~greg/mpdbook/ https://www2.cs.arizona.edu/~greg/mpdbook/ This will give you a solid foundation in all aspects of concurrency. 2) The Art of Multiprocessor Programming by Herlihy, Shavit et al. - https://shop.elsevier.com/books/the-art-of-multiprocessor-programming/herlihy/978-0-12-415950-1 https://shop.elsevier.com/books/the-art-of-multiprocessor-pr... The classic must-study book. Both the above are not language specific but do have examples in Java.
- Cwizard 11mo agoI read the “The Art of Multiprocessor Programming” and I don’t recommend it. It is very theoretical. There is no mention of practical performance considerations on real hardware. Large parts of the theory focus on lock-free and wait-free data structures. Which, while interesting, are not necessary for beginners.
- ashed96 11mo agoOnce you've gone through the learning resources others shared, LeetCode has a dedicated concurrency section for hands-on practice: https://leetcode.com/problemset/concurrency/ https://leetcode.com/problemset/concurrency/ (I actually authored a few of those problems - they cover the classic scenarios like producer-consumer, dining philosophers, etc.)
- another_twist 11mo agoDocs of java.util.concurrent would be my suggestion. And go straight into the wild and try to build a system that solves the billion rows challenge. You might want to truncate the input and start with a million row challenge first. The cool stuff in concurrency is not having to deal with it imoand recognizing when its not essential. Also I hope you mean concurrency not parallelism. The second one is a bit more manageable.
- notorious_pgb 11mo agoDo you know, deep down, what a thread is? What it actually is? If not, I suggest reading this blog post: https://prettygoodblog.com/p/what-threads-are-part-2 https://prettygoodblog.com/p/what-threads-are-part-2 (disclaimer: I wrote this)
- luhego 11mo agoIf you don’t mind learning another language. I have found Learn Concurrent Programming with Go by James Cutajar to be a very practical book. It includes memory sharing and message passing approaches with plenty of examples. It also explains concepts like mutual exclusion, deadlock-free and starvation-free properties and others. For Java, you can try The Art of Multiprocessor Programming Second Edition. It includes examples in Java but it is more theoretical and it includes a lot of proofs, specially the first half. The second half is more approachable.
- dvcoolarun 11mo agohttps://github.com/dabeaz/concurrencylive https://github.com/dabeaz/concurrencylive