Quoting from this article: "Virtual threads (JEP 425 
<https://openjdk.org/jeps/425>) make it cost-effective to dedicate a thread to 
every such I/O operation, but managing the huge number of threads that can 
result remains a challenge."

My quick take: may be this is due to "old thread think" as virtual threads are 
so new in Java? Has managing large number of goroutines been a problem?

One use I can see for giving each thread a handle is for doing user level 
scheduling and in general treating them as first class objects. This may be a 
cost vs benefit issue. 

> On Sep 30, 2022, at 10:49 PM, 'Axel Wagner' via golang-nuts 
> <golang-nuts@googlegroups.com> wrote:
> 
> Oh, following the link about Structured Concurrency at the end brings you to 
> https://openjdk.org/jeps/428 <https://openjdk.org/jeps/428>
> That *does* indeed seem to contain discussion about relevant topics. Perhaps 
> that's the link you intended to post?
> 
> On Sat, Oct 1, 2022 at 7:45 AM Axel Wagner <axel.wagner...@googlemail.com 
> <mailto:axel.wagner...@googlemail.com>> wrote:
> I've at least skimmed the article and I can't find any of the arguments you 
> say are there.
> For thread locals it says, if anything, that they should be avoided with 
> virtual threads - at least for some uses (the ones that you'd use a sync.Pool 
> for in Go). On coloring it only talks about the advantages of virtual threads 
> over async/await, which, well most Gophers will agree with.
> 
> Apart from these, I can't find anything that I could reasonably connect to 
> context.Context - the article seems almost exclusively an introduction to 
> virtual threads and an explanation on how they differ from operating system 
> threads. In particular, I don't see anything in this article which could 
> address the arguments Ian mentioned.
> 
> It teases at more articles, about "Structured Concurrency" and "Extent local 
> variables" - the latter sounds as if it *could* be what you talk about, but 
> that article doesn't seem to exist yet.
> 
> On Sat, Oct 1, 2022 at 6:15 AM Robert Engels <reng...@ix.netcom.com 
> <mailto:reng...@ix.netcom.com>> wrote:
> Again, please read the paper. The arguments you make are refuted. The lack of 
> routine context is a burden on the Go ecosystem and makes debugging highly 
> concurrent Go systems far more difficult than similar systems in Java. 
> 
>> On Sep 30, 2022, at 11:09 PM, Rob Pike <r...@golang.org 
>> <mailto:r...@golang.org>> wrote:
>> 
>> 
>> One of the critical decisions in Go was not defining names for goroutines. 
>> If we give threads/goroutines/coroutines (TGCs) names or other identifiable 
>> state, such as contexts, there arises a tendency to push everything into one 
>> TGC. We see what this causes with the graphics thread in most modern 
>> graphics libraries, especially when using a threading-capable language such 
>> as Go. You are restricted in what you can do on that thread, or you need to 
>> do some sort of bottlenecking dance to have the full language available and 
>> still honoring the requirements of a single graphics thread.
>> 
>> One way to see see what this means: Long ago, people talked of a "thread per 
>> request"  model, and honestly it was, or would have been, an improvement on 
>> standard practice at the time. But if you have cheap TGCs, there is no need 
>> to stop there: You can use multiple independently executing TGCs to handle a 
>> request, or share a TGC between requests for some part of the work (think 
>> database access, for example). You have the whole language available to you 
>> when programming a request, including the ability to use TGCs.
>> 
>> Like Ian, I have not read this paper, but I take it as a tenet that it is 
>> better to keep goroutines anonymous and state-free, and not to bind any 
>> particular calculation or data set to one thread of control as part of the 
>> programming model. If you want to do that, sure, go for it, but it's far too 
>> restrictive to demand it a priori and force it on others.
>> 
>> -rob
>> 
>> 
>> 
>> On Sat, Oct 1, 2022 at 1:39 PM Ian Lance Taylor <i...@golang.org 
>> <mailto:i...@golang.org>> wrote:
>> On Fri, Sep 30, 2022 at 7:32 AM Robert Engels <reng...@ix.netcom.com 
>> <mailto:reng...@ix.netcom.com>> wrote:
>> >
>> > Very interesting article came out recently. 
>> > https://www.infoq.com/articles/java-virtual-threads/ 
>> > <https://www.infoq.com/articles/java-virtual-threads/> and it has 
>> > implications for the Go context discussion and the author makes a very 
>> > good case as to why using the thread local to hold the context - rather 
>> > than coloring every method in the chain is a better approach. If the 
>> > “virtual thread aka Go routine” is extremely cheap to create you are far 
>> > better off creating one per request than pooling - in fact pooling becomes 
>> > an anti pattern. If you are creating one per request then the 
>> > thread/routine becomes the context that is required. No need for a 
>> > distinct Context to be passed to every method.
>> 
>> I didn't read the article (sorry).
>> 
>> In a network server a Go context is normally specific to, and shared
>> by, a group of goroutines acting on behalf of a single request.  It is
>> also normal for a goroutine group to manage access to some resource,
>> in which case the context is passed in via a channel when invoking
>> some action on behalf of some request.  Neither pattern is a natural
>> fit for a goroutine-local context.
>> 
>> Ian
>> 
>> -- 
>> 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 golang-nuts+unsubscr...@googlegroups.com 
>> <mailto:golang-nuts%2bunsubscr...@googlegroups.com>.
>> To view this discussion on the web visit 
>> https://groups.google.com/d/msgid/golang-nuts/CAOyqgcWAfdc2Np2KA%2B2-U9Z5Hv7tdHGgJHWDTUg_6pbr%3D8jghg%40mail.gmail.com
>>  
>> <https://groups.google.com/d/msgid/golang-nuts/CAOyqgcWAfdc2Np2KA%2B2-U9Z5Hv7tdHGgJHWDTUg_6pbr%3D8jghg%40mail.gmail.com>.
> 
> 
> -- 
> 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 golang-nuts+unsubscr...@googlegroups.com 
> <mailto:golang-nuts+unsubscr...@googlegroups.com>.
> To view this discussion on the web visit 
> https://groups.google.com/d/msgid/golang-nuts/CAD38A60-EE4B-4A76-9F7B-66A9939874F5%40ix.netcom.com
>  
> <https://groups.google.com/d/msgid/golang-nuts/CAD38A60-EE4B-4A76-9F7B-66A9939874F5%40ix.netcom.com?utm_medium=email&utm_source=footer>.
> 
> -- 
> 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 golang-nuts+unsubscr...@googlegroups.com 
> <mailto:golang-nuts+unsubscr...@googlegroups.com>.
> To view this discussion on the web visit 
> https://groups.google.com/d/msgid/golang-nuts/CAEkBMfEO-LVU_09itMwjdF-ciN_k9Dz_LthtWwgisMMz%2BQbMnw%40mail.gmail.com
>  
> <https://groups.google.com/d/msgid/golang-nuts/CAEkBMfEO-LVU_09itMwjdF-ciN_k9Dz_LthtWwgisMMz%2BQbMnw%40mail.gmail.com?utm_medium=email&utm_source=footer>.

-- 
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 golang-nuts+unsubscr...@googlegroups.com.
To view this discussion on the web visit 
https://groups.google.com/d/msgid/golang-nuts/DD955473-8C00-40BA-A11E-DE94BC01F80E%40iitbombay.org.

Reply via email to