运行循环的同步和异步输入源之间有什么区别?

问题描述 投票:0回答:1

这是什么意思,例如端口之类的输入源将事件传递给运行循环异步,而计时器则同步传递事件计时器会阻塞线程吗?

ios foundation
1个回答
0
投票

Threading Programming Guide: Run Loops说:

运行循环从两种不同类型的源接收事件。 输入源传递异步事件,通常是来自另一个线程或来自其他应用程序的消息。 计时器源传递同步事件,这些事件在计划的时间或重复的间隔发生。两种类型的源都使用特定于应用程序的处理程序例程来处理事件到达时的事件。

但是计时器只在计时器的闭包或选择器方法运行时才阻塞线程。但是,从该线程返回后,该线程将不再被阻塞。因此,请确保尽快进出。

例如,如果您将计时器安排为在10秒内启动,并且计时器的处理关闭/选择器中的代码需要100毫秒才能运行,那么直到计时器启动,线程才会被阻塞,然后仅持续100毫秒。与重复计时器相同。

最重要的是,只要您没有在计时器处理程序中进行任何计算上过于昂贵的事情,就无需担心。而且,如果您确实需要做任何可能会在任何实质性的时间段内阻塞的事情,那么要么让您的计时器处理程序异步地将该相关代码分配到某个后台队列,要么安排一个GCD计时器直接在后台队列上运行,绕过[ C0]。

但是对于大多数Timer用例,这不是问题。

© www.soinside.com 2019 - 2024. All rights reserved.