Thanks Jason, this is great feedback.
I've added a context argument in https://github.com/twpayne/go-heap/pull/6.
Regards,
Tom
On Sunday, October 6, 2024 at 9:58:43 PM UTC+2 Jason E. Aten wrote:
> Hi Tom,
>
> This is an interesting project.
>
> Per your request for feedback: on quick inspection, I would certainly want
> also a way to close down the priority channels too.
>
> Some sort of Close() method that would stop all running goroutines from
> behind-the-scenes, so they do not leak, would be important for any long
> running process.
>
> Maybe even use of a context.Context to effect the shutdown?
>
> You'll quickly realize that every go channel "raw" operation (not in a
> select) needs to be wrapped in a select{} in order to not be deadlocked
> when the time to shutdown arrives (usually on a channel itself). So for
> instance,
>
> https://github.com/twpayne/go-heap/blob/v0.0.2/prioritychannel.go#L89
> which says
>
> for value := range heap.All() {
> outCh <- value
> }
>
> would never do. One would need to allow for shutdown, something like:
>
> for value := range heap.All() {
> select {
> case outCh <- value:
> case <-
> shutdownRequestedCh:
> return // and
> presumably run other cleanup in a defer at the top of this func
> }
> }
>
> ...and repeat such fixes for all other "raw" channel sends and receives.
>
> Regards,
> Jason
>
>
>
>
> On Sunday, October 6, 2024 at 1:42:14 AM UTC+1 [email protected] wrote:
>
>> Have you ever wanted a channel that partially sorts the values being
>> passed through it? For example, you have some kind of work queue and you
>> want to do the most important work first. Well, now you can!
>>
>> github.com/twpayne/go-heap.PriorityChannel
>> <https://pkg.go.dev/github.com/twpayne/go-heap#PriorityChannel>
>> implements this: give it a channel and a comparison function and you get
>> back a new channel that returns values in priority order until the original
>> channel is closed.
>>
>> Only want the highest priority value from the last N? Then use
>> github.com/twpayne/go-heap.BufferedPriorityChannel
>> <https://pkg.go.dev/github.com/twpayne/go-heap#BufferedPriorityChannel>.
>>
>> Code is at
>> https://github.com/twpayne/go-heap/blob/main/prioritychannel.go. It's a
>> fun combination of generics, iterators, and channels.
>>
>> Feedback welcome!
>>
>> Regards,
>> Tom
>>
>
--
You received this message because you are subscribed to the Google Groups
"golang-nuts" group.
To unsubscribe from this group and stop receiving emails from it, send an email
to [email protected].
To view this discussion on the web visit
https://groups.google.com/d/msgid/golang-nuts/cf08ad9f-c47d-46b3-8653-7caf80ac31dcn%40googlegroups.com.