端口等输入源将事件传递到运行循环异步,而计时器则同步传递事件,这是什么意思。
计时器会阻塞线程吗?
答案 0 :(得分:0)
Threading Programming Guide: Run Loops说:
运行循环从两种不同类型的源接收事件。 输入源传递异步事件,通常是来自另一个线程或其他应用程序的消息。 计时器源传递同步事件,这些事件在预定的时间或重复的间隔发生。两种类型的源都使用特定于应用程序的处理程序例程来处理事件的到达时间。
但是计时器仅在计时器的闭包或选择器方法运行时才阻塞线程。但是,从该线程返回后,该线程将不再被阻塞。因此,请确保尽快进出。
例如,如果您安排了一个计时器在10秒内启动,并且计时器的处理关闭/选择器中的代码需要100毫秒才能运行,则直到计时器启动后才阻塞线程,然后仅执行100秒毫秒与重复计时器相同。
最重要的是,只要您没有在计时器处理程序中进行任何计算上过于昂贵的事情,就无需担心。而且,如果您确实需要做任何可能会在任何实质性的时间段内阻塞的事情,那么要么让您的计时器处理程序异步地将该相关代码分配到某个后台队列,要么安排一个GCD计时器直接在后台队列上运行,绕过{ {1}}。
但是对于大多数Timer
用例来说,这不是问题。