[HN Gopher] Prioritize work at the task level
       ___________________________________________________________________
        
       Prioritize work at the task level
        
       Author : tosh
       Score  : 96 points
       Date   : 2024-11-26 10:42 UTC (3 days ago)
        
 (HTM) web link (developer.apple.com)
 (TXT) w3m dump (developer.apple.com)
        
       | ComputerGuru wrote:
       | I thought this was a life hack recommendations article but it's
       | about Quality of Service.
       | 
       | @dang or @op can we get QoS added to the title?
        
         | jolmg wrote:
         | I thought the same, but the parenthesized domain should be an
         | adequate hint, to be fair.
        
           | aaronbrethorst wrote:
           | Here's a link to best practices for multitasking from the
           | same domain: https://developer.apple.com/design/human-
           | interface-guideline...
        
             | danudey wrote:
             | I fell for this one too.
        
         | winwang wrote:
         | I actually thought you meant that this was about applying QoS
         | algos to real life, before I saw the link lol.
        
         | Etheryte wrote:
         | It's good practice to not editorialize the title when making a
         | submission. You could misread many titles to mean something
         | else, it's sort of a hidden assumption that you should read the
         | article before commenting on it.
        
       | lupire wrote:
       | Why would a dev use this? I want my app to perform as high as
       | possible, regardless of other apps (published by other companies)
       | on the system.
       | 
       | This should be a user-controlled feature, with tasks identified
       | and labeled by the OS.
        
         | petercooper wrote:
         | User experience? Developers do profiling, optimization, and the
         | like all the time to make their apps smoother, faster, and less
         | intensive on the system.
         | 
         | If every app did this properly, the benefit is that when you
         | _really_ need absolute highest priority for a task, you might
         | actually stand a chance of getting it if every other app isn 't
         | doing exactly the same thing. But tragedy of the commons and
         | all that..
        
         | lopkeny12ko wrote:
         | That's not how this works. Fundamentally, any machine has
         | finite resources and it is the kernel's responsibility to sort
         | and prioritize more work than there are available resources to
         | complete it. If you make no differentiation in priority of your
         | app's tasks by saying "everything is important," then the
         | kernel will treat _truly important_ work as weighted equally as
         | unimportant work. You can see how this is counterproductive,
         | both to your app, the user of your app, and other apps running
         | on the system written other developers.
        
           | rossjudson wrote:
           | Critically important is a _metric_ that the doc notes: Apps
           | should spend 90% of their time when they are _not_ responding
           | to UI-initiated tasks at  "Utility" or less...and then
           | there's a mechanism devs can use to actually see where their
           | apps sit.
           | 
           | Setting a standard is helpful, but providing well-engineered
           | mechanisms and monitoring to accelerate compliance is
           | critical to achieving the intended _overall_ effects (let 's
           | say, battery life).
        
         | Thorrez wrote:
         | If your app drains all the battery, or makes the phone laggy,
         | users might avoid your app.
        
         | wat10000 wrote:
         | I use more than one app at a time. If your app performs great
         | and starves out all the others, then it's going in the trash.
        
         | cratermoon wrote:
         | This isn't DOS 3.2, apps don't get the whole computer ever.
         | Applications play nice in the multi-tasking world or they get
         | replaced by ones that do.
        
         | tessela wrote:
         | This kind of thinking is exactly why Electron-based apps end up
         | consuming 4% CPU while doing nothing, and why some games use
         | 100% CPU just sitting in their menus.
         | 
         | Why would you expect users to manage threads, processors, and
         | system resources themselves?
        
           | firejake308 wrote:
           | I agree with you, but I wonder what the incentive is for
           | developers to use resources responsibly. Is it just that
           | users will uninstall apps that drain their battery? Or are
           | there penalties imposed by the OS on developers who refuse to
           | play nicely?
        
             | vlovich123 wrote:
             | At a minimum this is done diligently for Apple-written
             | software.
             | 
             | For foreground apps like electron actually this wouldn't do
             | anything because you generally want it to be foreground.
             | However, various extensions probably should use a different
             | QoS level because responsiveness is better (eg code
             | indexing, builds, etc).
             | 
             | The incentive is a better user experience and a lot of
             | times software engineers end up using the software they're
             | building so the self interest incentive exists. And
             | developers also exist who view it as a craft and push
             | themselves to write better software.
        
         | danans wrote:
         | If you are developing a web app, you are probably using it
         | without knowing it by using the browser's runtime environment,
         | which itself interfaces with the OS's task scheduling system,
         | probably setting it's own UI tasks to higher priority.
         | 
         | There is a recent w3c proposal to add explicit support for QoS
         | hints to web workers:
         | 
         | https://www.w3.org/2023/Talks/TPAC/breakouts/web-worker-qos/
        
         | Nezghul wrote:
         | I recently read a lot of Microsoft "The Old New Thing" blog
         | where a few times were mentioned "Le Chatelier's Principle as
         | interpreted by John Gall: Every system resists its proper
         | functioning". It was the first thing I thought of when reading
         | about assigning quality of service, and here is your comment :P
        
         | arthurofbabylon wrote:
         | You might appreciate that many of these processes compete
         | internally within a single app's access to compute/networking.
         | This is how a developer can prioritize within their own app's
         | processes.
         | 
         | Regarding prioritization across multiple apps' processes, you
         | might be surprised by just how considerate iOS developers can
         | be. They (we!) tend to obsess over user experience, and
         | knowingly adjust QoS to fit the user's best position vs the
         | app's best position, understanding that such a values-first
         | approach to development raises overall product quality. (You
         | can call that "alignment.") After all, it is literally a single
         | line of code.
         | 
         | For my primary project minimal.app, I use .userInteractive QoS
         | extensively for collaboration and sync, and otherwise fall back
         | to a more appropriate QoS. The point that I have internalized
         | is that this most crucial process (sync/collaboration) is an
         | order of magnitude or greater more important than any other
         | process. Of course I will internally prioritize this key
         | process, and such internal prioritization naturally bleeds into
         | the greater ecosystem appropriately, benefitting the user. This
         | QoS system is so well-designed that my self-interest (or
         | rather, my obsession with making my app as useful as possible)
         | aligns across other apps and their self-interests.
        
       | eunoia wrote:
       | Additional reading about how Swift Structured Concurrency (Task
       | API) utilizes and propagates QoS is in the proposal doc.
       | 
       | https://github.com/swiftlang/swift-evolution/blob/main/propo...
        
       | jmmv wrote:
       | A number of years ago, I was working on the port of Bazel to
       | macOS. One of the issues we faced internally at Google was that
       | some of our users reported that Bazel builds randomly killed
       | their Internet connection and that they performed poorly.
       | 
       | There was a lot of FUD around the topic, with some engineers
       | blanket-claiming that "well, macOS is bad at threads, so there's
       | that". I didn't buy that explanation because I had seen macOS
       | under serious load in other occasions and none of this nonsense
       | happened in them.
       | 
       | And then, almost by chance, I stumbled upon this QoS system, did
       | a few spot-checks, and found that the VPN daemon was
       | misconfigured to run at a low class. Consequently, Bazel starved
       | the VPN for those users and made everything misbehave. Adjusting
       | that one parameter fixed everything.
       | 
       | If you are curious, I ended up writing some more on this here:
       | https://jmmv.dev/2019/03/macos-threads-qos-and-bazel.html
        
         | crabique wrote:
         | How would one go about changing QoS for the system daemons and
         | would it require disabling SIP? I don't see anything relevant
         | in launchctl's man or launchd documentation, really interested
         | to try it on the system VPN service.
        
           | jmmv wrote:
           | In that specific case, it was our own installation of a VPN
           | client and a custom definition of its launchd configuration.
           | I don't remember the exact details anymore.
           | 
           | I'd expect the system-provided services to be correctly
           | configured by Apple in this regard.
        
       ___________________________________________________________________
       (page generated 2024-11-29 23:00 UTC)