7 ms·
So this new concurrent map? Am I right in understanding it's designed for cases where you have a map shared between goroutines but where each goroutine essentia
by alphaalpha101 9y ago
So this new concurrent map? Am I right in understanding it's designed for cases where you have a map shared between goroutines but where each goroutine essentially owns some subset of the keys in the map?
So basically it's designed for cases like 'I have N goroutines and each one owns 1/N keys'?
- kraig 9y agoor you just have two or more goroutines that need to modify a map
- artursapek 9y agoIt could just be one map shared by many goroutines, which normally causes a panic: fatal error: concurrent map writes
- freecodyx 9y agoi am dealing with this problem right now. also i have a big problem with deepclone, I did a big rewrite of a current project, and clearly it was badly designed :(
- deleted 9y ago[deleted]
- azinman2 9y agoStandard practice is to use a mutex to guard against concurrent usage.
- logicallee 9y agoalso necessary for reads? Also, do you have any good references to proper best practices around concurrent and parallel programming? (in Go.) Like just basic things. Code I can copy and paste without it having obscure race conditions because that use of mutex is absolutely correct, and something that lets me understand the limitations. I feel like it is very easy to do things "wrong" or not notice some edge cases. In C++ I didn't only ever coded single-threaded for this reason. Too many gotchas. Any help would be appreciated.
- carbocation 9y agoNecessary for reads unless no additional writing will be done. If you initialize/write into a map and then later have concurrent reads from it, the program will run. If you try to write in the midst of this, it will crash.
- dgellow 9y agoI would suggest you to read the book "Concurrency in Go", by Katherine Cox-Budai, 2017: http://shop.oreilly.com/product/0636920046189.do http://shop.oreilly.com/product/0636920046189.do
- logicallee 9y agoThank you for the recommendation!
- vanderZwan 9y ago> each goroutine essentially owns some subset of the keys in the map With those constraints, why not create a small map for each goroutine at that point, and merge the maps afterwards?
- imaginenore 9y agoThen you have to merge them on every read (after any modification).
- squiguy7 9y agoThis lightning talk gives some great information on use cases for the new sync.Map: https://youtu.be/C1EtfDnsdDs https://youtu.be/C1EtfDnsdDs
- deckarep 9y agoWow great find!
- alphaalpha101 9y agoI really, really don't understand why this would get downvoted. Are people not allowed to ask questions now?
- pvg 9y agoThey're discouraged from complaining about downvoting.
- alphaalpha101 9y agoIt was not a complaint, it was a question, just like my top-level comment. Was that interpreted as a complaint as well? Is that the problem?
- issaria 9y agoA concurrent map in my understanding, is a map that can be accessed concurrently without explicit synchronization, not each coroutine has a piece of it. Check java ConcurrentHashMap.
- pvg 9y agoIt sounded like complaining but either way, take a look at these. https://news.ycombinator.com/newsguidelines.html https://news.ycombinator.com/newsguidelines.html "Please don't comment about the voting on comments. It never does any good, and it makes boring reading."