actually, you're right, in go they're fixed sized buffers
http://golang.org/src/pkg/runtime/chan.c . I can understands (and agree!)
that this is not a good default if a more dynamic data structure can work
well.

in haskell / ghc , bounded channels are dynamically sized, and merely have
a max size thats enforced by the provided api,and I've been speaking with
that sort of memory usage model in mind.


On Fri, Dec 20, 2013 at 4:15 PM, Carter Schonwald <
carter.schonw...@gmail.com> wrote:

> i'd be very very surprised if bounded channels in go don't dynamically
> resize their queues and then atomically insert / remove elements while
> checking the bound.  I'd actually argue that such would be a bug.
>
>
> On Fri, Dec 20, 2013 at 4:09 PM, Kevin Ballard <ke...@sb.org> wrote:
>
>> I haven’t profiled it, but my belief is that under normal circumstances,
>> messages come in slow enough that the consumer is always idle and ready to
>> process the next message as soon as it’s sent. However, I expect it does
>> occasionally back up a bit, e.g. when I get a burst of traffic such as
>> during a netsplit when I’m sent a large batch of “<user> has quit” or
>> “<user> has joined” (when the netsplit is over). I don’t know how much the
>> channel backs up at that point, probably not too much.
>>
>> For this particular use-case, a channel that’s bounded at e.g. 100,000
>> elements would be indistinguishable from an infinite channel, as long as it
>> still dynamically allocates (I don’t *think* Go channels dynamically
>> allocate, which is why I can’t just use a 100,000 element channel for real).
>>
>> However, my overall point about large bounds being indistinguishable from
>> infinite is that if your goal is to pick a bound large enough to appear
>> infinite to the program, without actually risking OOM, then there’s no
>> automated way to do this. Different environments have differing amounts of
>> available resources, and there’s no good way to pick a bound that is
>> sufficiently high but is definitively lower than the resource bounds. This
>> is why I’m recommending that we have truly infinite channels, for users who
>> don’t want to have to think about bounds (e.g. my irc program), as well as
>> bounded channels, where the user has to explicitly pick a bound (with no
>> “default” provided).
>>
>> -Kevin
>>
>> On Dec 20, 2013, at 12:55 PM, Carter Schonwald <
>> carter.schonw...@gmail.com> wrote:
>>
>> kevin, what sort of applications and workloads are you speaking about. Eg
>> in your example irc server, whats the typical workload when you've used it?
>>
>> cheers
>> -Carter
>>
>>
>> On Fri, Dec 20, 2013 at 12:54 PM, Kevin Ballard <ke...@sb.org> wrote:
>>
>>> On Dec 20, 2013, at 8:59 AM, Carter Schonwald <
>>> carter.schonw...@gmail.com> wrote:
>>>
>>> agreed! Applications that lack explicit logic for handling heavy
>>> workloads (ie producers outpacing consumers for a sustained period) are the
>>> most common culprit for unresponsive desktop applications that become
>>> completely unusable.
>>>
>>>
>>> That’s a pretty strong claim, and one I would have to disagree with
>>> quite strongly. Every time I’ve sampled an unresponsive application, I
>>> don’t think I’ve *ever* seen a backtrace that suggests a producer
>>> outpacing a consumer.
>>>
>>> -Kevin
>>>
>>> relatedly: would not bounded but programmatically growable channels also
>>> make it trivial to provide a "unbounded" style channel abstraction? (not
>>> that i'm advocating that, merely that it seems like it would turn the
>>> unbounded channel abstraction into an equivalent one that is resource usage
>>> aware)
>>>
>>>
>>> On Fri, Dec 20, 2013 at 8:52 AM, György Andrasek <jur...@gmail.com>wrote:
>>>
>>>> On 12/19/2013 11:13 PM, Tony Arcieri wrote:
>>>>
>>>>> So I think that entire line of reasoning is a red herring. People
>>>>> writing toy programs that never have their channels fill beyond a small
>>>>> number of messages won't care either way.
>>>>>
>>>>> However, overloaded programs + queues bounded by system resources are a
>>>>> production outage waiting to happen. What's really important here is
>>>>> providing a means of backpressure so overloaded Rust programs don't
>>>>> grow
>>>>> until they consume system resources and OOM.
>>>>>
>>>>
>>>> While I disagree with the notion that all programs which don't have
>>>> their bottlenecks right here are "toys", we should definitely strive for
>>>> the invariant that task failure does not cause independent tasks to fail.
>>>>
>>>> Also, OOM is not free. If you manage to go OOM on a desktop, you'll get
>>>> a *very* unhappy user, regardless of their expectations wrt your memory
>>>> usage. Linux with a spinning disk and swap for example will degrade to the
>>>> point where they'll reboot before the OOM killer kicks in.
>>>>
>>>> Can we PLEASE not do that *by default*?
>>>>
>>>> _______________________________________________
>>>> Rust-dev mailing list
>>>> Rust-dev@mozilla.org
>>>> https://mail.mozilla.org/listinfo/rust-dev
>>>>
>>>
>>> _______________________________________________
>>> Rust-dev mailing list
>>> Rust-dev@mozilla.org
>>> https://mail.mozilla.org/listinfo/rust-dev
>>>
>>>
>>>
>>
>>
>
_______________________________________________
Rust-dev mailing list
Rust-dev@mozilla.org
https://mail.mozilla.org/listinfo/rust-dev

Reply via email to