Earlier quoted context omitted.
>> As always, if one goroutine is writing to a map, no other goroutine should be reading or writing the map concurrently. > What if you are writing to a value in the map? Surely that is safe to do concurrently with other processes reading at least. Nope. You need to protect your state by communicating with channels or using a lock.
> You need to protect your state by communicating with channels or using a lock. But what are you protecting? Setting a value will not cause a map rebalance, and so long as you are just setting a new value (not incrementing or like) it should be an atomic operation. Locking is really slow, and if you can find safe ways to avoid it, it can be a good thing.
Go 1.6 Release Candidate 1 is released
11–20 of 23 posts
Re: Go 1.6 Release Candidate 1 is released
#12Interesting thing about this release is baked in support for Http/2. On the client side, http/2 is awesome for services like spiders that support it because the memory usage and performance is a lot better. And you don't even have to do anything to take advantage other than upgrade to go 1.6
I know, right! That's what's sick. Even upgrading to the latest version of go is easy: "To remove an existing Go installation from your system delete the go directory. This is usually /usr/local/go." Then install the latest...
Re: Go 1.6 Release Candidate 1 is released
#13I've been testing out Go for a while now and outside of deployment, the CPU performance and GC tuning that has come with new versions has been a really, really great perk over time. No code change, no breakage, just constant free performance.
Re: Go 1.6 Release Candidate 1 is released
#14Earlier quoted context omitted.
>> As always, if one goroutine is writing to a map, no other goroutine should be reading or writing the map concurrently. > What if you are writing to a value in the map? Surely that is safe to do concurrently with other processes reading at least. Nope. You need to protect your state by communicating with channels or using a lock.
> You need to protect your state by communicating with channels or using a lock. But what are you protecting? Setting a value will not cause a map rebalance, and so long as you are just setting a new value (not incrementing or like) it should be an atomic operation. Locking is really slow, and if you can find safe ways to avoid it, it can be a good thing.
Re: Go 1.6 Release Candidate 1 is released
#15I've been testing out Go for a while now and outside of deployment, the CPU performance and GC tuning that has come with new versions has been a really, really great perk over time. No code change, no breakage, just constant free performance.
We can see the way Go solves this problem without breaking your code, a way not taken these days where not so well designed solutions break when we have to upgrade. Python 2 and python 3, angular 1 and angular 2. I guess this is the difference between a pet project gone wild and a well thought and well designed programming language designed to make the process of building applications faster and better!
Re: Go 1.6 Release Candidate 1 is released
#16Earlier quoted context omitted.
>> As always, if one goroutine is writing to a map, no other goroutine should be reading or writing the map concurrently. > What if you are writing to a value in the map? Surely that is safe to do concurrently with other processes reading at least. Nope. You need to protect your state by communicating with channels or using a lock.
> You need to protect your state by communicating with channels or using a lock. But what are you protecting? Setting a value will not cause a map rebalance, and so long as you are just setting a new value (not incrementing or like) it should be an atomic operation. Locking is really slow, and if you can find safe ways to avoid it, it can be a good thing.
The hash map first needs to determine whether it already has a value with such a key or not, which requires some checking that typically involves many instructions and is not atomic. And to determine that, you at least need a read-lock.
Re: Go 1.6 Release Candidate 1 is released
#17Interesting thing about this release is baked in support for Http/2. On the client side, http/2 is awesome for services like spiders that support it because the memory usage and performance is a lot better. And you don't even have to do anything to take advantage other than upgrade to go 1.6
>> And you don't even have to do anything to take advantage other than upgrade to go 1.6 I know, right! That's what's sick. Even upgrading to the latest version of go is easy: "To remove an existing Go installation from your system delete the go directory. This is usually /usr/local/go." Then install the latest...
Re: Go 1.6 Release Candidate 1 is released
#18> As always, if one goroutine is writing to a map, no other goroutine should be reading or writing the map concurrently. What if you are writing to a value in the map? Surely that is safe to do concurrently with other processes reading at least.
Only if you do something like: ml.Lock() v := m["key"] // maybe m is something like map[string]*MyValue ml.Unlock() v.foo = "bar" // m["key"].foo is now bar, because m["key"] both point to the same object
Re: Go 1.6 Release Candidate 1 is released
#19I've been testing out Go for a while now and outside of deployment, the CPU performance and GC tuning that has come with new versions has been a really, really great perk over time. No code change, no breakage, just constant free performance.
We can see the way Go solves this problem without breaking your code, a way not taken these days where not so well designed solutions break when we have to upgrade. Python 2 and python 3, angular 1 and angular 2. I guess this is the difference between a pet project gone wild and a well thought and well designed programming language designed to make the process of building applications faster and better!
Re: Go 1.6 Release Candidate 1 is released
#20Interesting thing about this release is baked in support for Http/2. On the client side, http/2 is awesome for services like spiders that support it because the memory usage and performance is a lot better. And you don't even have to do anything to take advantage other than upgrade to go 1.6
https://www.nginx.com/wp-content/uploads/2015/09/NGINX_HTTP2...