弄清楚在Swift中发生上下文切换的时间

弄清楚在Swift中发生上下文切换的时间,第1张

概述说实话,我不知道我的问题是否可能有解决方案但是我想在 Swift中捕获上下文切换时的情况. 我正在为一个func成像,这需要很长时间才能完成,比如远程服务器上的写 *** 作,我在想是否有办法理解何时(至少哪一行)正在执行该任务的线程正在执行上下文切换,因为必须执行等待很长时间的另一个任务. 对不起,如果你看起来似乎是一个愚蠢的问题,或者我在试图解释上述内容时犯了错误 编辑: 我正在谈论调度程序自动请求发 说实话,我不知道我的问题是否可能有解决方案但是我想在 Swift中捕获上下文切换时的情况.

我正在为一个func成像,这需要很长时间才能完成,比如远程服务器上的写 *** 作,我在想是否有办法理解何时(至少哪一行)正在执行该任务的线程正在执行上下文切换,因为必须执行等待很长时间的另一个任务.

对不起,如果你看起来似乎是一个愚蠢的问题,或者我在试图解释上述内容时犯了错误

编辑:

我正在谈论调度程序自动请求发生的上下文切换.所以想象一下,我们处于这个长函数的中间,它执行大量 *** 作并且调度程序给这个任务一个秒,例如10秒为了完成它.如果进程耗尽时间并且没有结束任务,它将被挂起,例如线程将执行另一个进程的另一个任务.当它结束时,调度程序可能会考虑再次尝试挂起的作业,执行将从它被挂起的地方开始恢复(因此将从PC寄存器读取值并继续)

解决方法 你绝对可以得到你所要求的东西,但我觉得它对你的影响远远小于你所认为的.大多数(广泛的,巨大的!)大多数上下文切换都会发生在您可能会认为“无趣”的点上. lstat64(),mach_vm_map_trap(),mach_msg_trap(),mach_port_insert_member_trap(),kevent_ID(),列表继续.大多数线程大部分时间都花在OS堆栈中. “远程服务器上的写 *** 作”在需要很长时间后才会阻塞.它将主动阻止自己,因为它知道它将需要一个(令人难以置信的)很长一段时间.

即便如此,你当然可以用仪器探索这个.只需选择系统跟踪配置文件,它将显示所有线程和系统核心,以及您的线程和设备上的所有其他线程如何安排,每次系统调用等等.这是大量的信息,所以你通常一次只能查看几秒钟.但它看起来像这样:

如果您处于上下文切换是主要瓶颈的位置,这是有用的信息.如果您正在处理过多的锁争用,或者由于您不断被其他线程中断而使您的L1缓存颠簸,则可能会发生这种情况.因此,如果你有一些线程,你希望它能够持续运行,并且它被阻止,这是非常有价值的信息.或者如果你有两个线程,你认为应该顺利地来回工作,但它们似乎在战斗(快速切换),那么你可以继续努力. (但这很少是你寻找性能调优的第一个地方,除非你正在处理相当低级的代码.)

根据您的描述,我认为您可能对调度程序有错误的想法.调度程序中的任何内容都不会超过10秒.在调度程序世界中,毫秒是很多时间.你应该考虑微秒甚至纳秒的事情.如果您正在处理假设从RAM中获取数据是免费的代码,那么您的时间尺度会错误. A network call is so ludicrously slow that you can basically estimate it as “forever.”在上下文切换级别,您正在查看以下事件:

00:00.770.247   Virtual memory Zero Fill took 10.50 µs  small_free_List_add_ptr ← (31 other frames)
总结

以上是内存溢出为你收集整理的弄清楚在Swift中发生上下文切换的时间全部内容,希望文章能够帮你解决弄清楚在Swift中发生上下文切换的时间所遇到的程序开发问题。

如果觉得内存溢出网站内容还不错,欢迎将内存溢出网站推荐给程序员好友。

欢迎分享,转载请注明来源:内存溢出

原文地址: https://outofmemory.cn/web/1005753.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2022-05-22
下一篇 2022-05-22

发表评论

登录后才能评论

评论列表(0条)

保存