Git Product home page Git Product logo

Comments (3)

marten-seemann avatar marten-seemann commented on September 25, 2024

The problem seems to be exacerbated by quic-go's heavy internal use of goroutines, interacting poorly with the Go runtime's thread scheduling on iOS.

Can you elaborate what you mean by heavy use? We only have one Go routine per connection, plus one for the send queue (https://github.com/quic-go/quic-go/blob/master/connection.go#L515).

You could try driving the send queue from the connection's Go routine, this should be a very simple change.

from quic-go.

minchopm avatar minchopm commented on September 25, 2024

Thank you for your response. I apologize for any confusion caused by my previous explanation. Upon further investigation, I realized that the issue isn't related to the heavy use of goroutines within quic-go.

To clarify, the problem appears to be with the use of even a single goroutine causing significant packet delay on iOS. Here are the details of my findings:

Testing with a Regular UDP Connection:

I set up a basic UDP connection and sent 1000-byte packets every 20 milliseconds.
When running this setup without using any goroutines, the network traffic is handled correctly with no significant delays.
However, when I wrapped the UDP connection inside a single goroutine, I observed significant packet delays.
Implications for quic-go:

Given that quic-go uses a single goroutine per connection plus one for the send queue, this behavior likely affects quic-go as well, since it involves goroutine handling.

Build Environment:

I used the following build command for iOS:

GOOS=ios GOARCH=arm64 CGO_ENABLED=1 CC=$(go env GOROOT)/misc/ios/clangwrap.sh go build -ldflags -w -v -tags ios -o "IOS.a" -buildmode=c-archive

It seems the interaction between the Go runtime's thread scheduling and goroutines on iOS is the root cause of the delay, as extensively discussed in this Go issue.

I appreciate your suggestion to drive the send queue from the connection's goroutine and will look into implementing this change to see if it mitigates the issue.

Thank you for your attention and assistance with this matter.

from quic-go.

marten-seemann avatar marten-seemann commented on September 25, 2024

If this is actually due to golang/go#65889, I fear there's not a lot we can do here. It seems like the only way to resolve the issue would be to avoid using Go routines altogether.

from quic-go.

Related Issues (20)

Recommend Projects

  • React photo React

    A declarative, efficient, and flexible JavaScript library for building user interfaces.

  • Vue.js photo Vue.js

    🖖 Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.

  • Typescript photo Typescript

    TypeScript is a superset of JavaScript that compiles to clean JavaScript output.

  • TensorFlow photo TensorFlow

    An Open Source Machine Learning Framework for Everyone

  • Django photo Django

    The Web framework for perfectionists with deadlines.

  • D3 photo D3

    Bring data to life with SVG, Canvas and HTML. 📊📈🎉

Recommend Topics

  • javascript

    JavaScript (JS) is a lightweight interpreted programming language with first-class functions.

  • web

    Some thing interesting about web. New door for the world.

  • server

    A server is a program made to process requests and deliver data to clients.

  • Machine learning

    Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.

  • Game

    Some thing interesting about game, make everyone happy.

Recommend Org

  • Facebook photo Facebook

    We are working to build community through open source technology. NB: members must have two-factor auth.

  • Microsoft photo Microsoft

    Open source projects and samples from Microsoft.

  • Google photo Google

    Google ❤️ Open Source for everyone.

  • D3 photo D3

    Data-Driven Documents codes.