您当前的位置: 首页 >  swift

猜猜看:极简例子Swift代码并发耗时不按预期的原因

发布时间:2020-01-26 14:14:50 ,浏览量:0

一段老外写的Swift并发代码,在Playground中运行:

let sentence = "Ray’s courses are the best!" let wordOperation = BlockOperation() for word in sentence.split(separator: " ") { wordOperation.addExecutionBlock { print(word) sleep(2) } } duration { wordOperation.start() } 

最后的duration方法会返回其中block的耗时。

duration代码如下:

public func duration(_ block: () -> ()) -> TimeInterval { let startTime = Date() block() return Date().timeIntervalSince(startTime) } 

作者给出的耗时应该是2s左右,但在我的Mac运行结果是4s左右…

在这里插入图片描述

做一下背景科普:

这里使用了Operation类型的一种:BlockOperation,你可以将其看做它是一个直接可以执行block的类,所以你无需在继承的Operation的子类里做文章,省事不少。

BlockOperation默认会在全局队列里并发运行,所以仔细看上面的代码,貌似应该像作者说的那样,耗时是2s左右…

那么是肿么回事呢?来猜猜看… 在这里插入图片描述

答案很简单:和你的设备有关!!!!!

它与你的CPU频率快慢没有太大关系(的确也有关,但这里可以忽略之…),但和CPU内核数有直接关系!

我的MacBook Air是4核,而上面会并发处理5个单词,所以第5个单词必须等待,所以会多出个2s来!

而作者的Mac处理器核心数一定大于4,我猜应该至少是8核,所以他只要2s就全部搞定了。

That‘s All!

你猜对了吗?

在这里插入图片描述

关注
打赏
1688896170
查看更多评论

暂无认证

  • 0浏览

    0关注

    107766博文

    0收益

  • 0浏览

    0点赞

    0打赏

    0留言

私信
关注
热门博文
立即登录/注册

微信扫码登录

0.0473s