SlideShare ist ein Scribd-Unternehmen logo
1 von 59
Downloaden Sie, um offline zu lesen
34 AVENUE DE L’OPÉRA > 75002 PARIS > FRANCE > WWW.OCTO.COM
08/03/2018
ASYNCHRONOUS SWIFT
Jordhan Leoture
TABLE OF CONTENT
01
02
03
04
> PARALLELISM & CONCURRENCY
> FAIR LOCK & UNFAIR LOCK
> DISPATCHQUEUE
> FUTURE & PROMISE
2
01 PARALLELISM & CONCURRENCY
PARALLELISM & CONCURRENCY
PARALLELISM
A problem is solved by multiple processors
CONCURRENCY
Many problems are solved by one processor
4
PARALLELISM & CONCURRENCY
Grand Central Dispatch
5
• Reduces memory for storing thread stacks
• Reduces code related to thread
management
• Simplifies code
PARALLELISM & CONCURRENCY
Parallelism - Example
6
PARALLELISM & CONCURRENCY
Parallelism - Example
6
PARALLELISM & CONCURRENCY
Parallelism with GCD
7
DispatchQueue.concurrentPerform(16) { i in /* iteration */ }
PARALLELISM & CONCURRENCY
Parallelism with GCD
8
DispatchQueue.concurrentPerform(16) { i in /* iteration */ }
UI Rendering
PARALLELISM & CONCURRENCY
Parallelism with GCD
9
DispatchQueue.concurrentPerform(1000) { i in /* iteration */ }
UI Rendering
PARALLELISM & CONCURRENCY
Concurrency - Example
10
Task #1
#3
#4
#2
PARALLELISM & CONCURRENCY
Concurrency - Example
11
CONTEXT SWITCH
PARALLELISM & CONCURRENCY
Concurrency - Example
12
CONTEXT SWITCH
• Save the context of the current thread
• Find the context of the next thread
• Reload the context of the next thread
• Resume the next thread
PARALLELISM & CONCURRENCY
Concurrency - Example
13
The OS chooses the next thread
• A higher priority thread needs the CPU
• The current thread finishes its work
• The current thread is waiting for a resource
• The time of the current thread has expired
PARALLELISM & CONCURRENCY
Concurrency - Example
14
Other process
PARALLELISM & CONCURRENCY
Recurring problems
15
• Frequently block threads for resource access
• Many context switch between independent operations
02 FAIR LOCK & UNFAIR LOCK
FAIR LOCK & UNFAIR LOCK
17
FAIR LOCK & UNFAIR LOCK
Fair lock
18
owned reserved owned reserved
FAIR LOCK & UNFAIR LOCK
Unfair lock
19
owned waiters owned waiters
FAIR LOCK & UNFAIR LOCK
FAIR LOCK
No waiter starvation but many context switches
UNFAIR LOCK
Subject to waiter starvation but reduced context switches
20
FAIR LOCK & UNFAIR LOCK
21
FAIR LOCK
(dispatch_semaphore)
UNFAIR LOCK
(os_unfair_lock)
TIME BY LOCK LONG SHORT
# LOCK BY THREAD FEW MANY
# THREAD NEED THE
LOCK
MANY FEW
FAIR LOCK & UNFAIR LOCK
Recurring problems
22
• Frequently block threads for resource access
• Many context switch between independent operations
03 DISPATCHQUEUE
DISPATCHQUEUE
• Perform tasks asynchronously and concurrently
• FIFO
• Thread-safe
• Serial or concurrent
24
Good to know
DISPATCHQUEUE
25
Quality of Service Classes
User-interactive Virtually instantaneous
User-initiated Nearly instantaneous
Default No information
Utility Seconds or few minutes
Background Minutes or hours
Unspecified Legacy APIs
High
Low
DISPATCHQUEUE
26
Asynchronous
queue
let queue = DispatchQueue(label: "serial-queue")
queue.async { /* block1 */ }
queue.async { /* block2 */ }
queue.async { /* block3 */ }
DISPATCHQUEUE
26
Asynchronous
queue Block1
let queue = DispatchQueue(label: "serial-queue")
queue.async { /* block1 */ }
queue.async { /* block2 */ }
queue.async { /* block3 */ }
DISPATCHQUEUE
26
Asynchronous
queue Block1
let queue = DispatchQueue(label: "serial-queue")
queue.async { /* block1 */ }
queue.async { /* block2 */ }
queue.async { /* block3 */ }
Block2
DISPATCHQUEUE
26
Asynchronous
queue Block1
let queue = DispatchQueue(label: "serial-queue")
queue.async { /* block1 */ }
queue.async { /* block2 */ }
queue.async { /* block3 */ }
Block2 Block3
DISPATCHQUEUE
26
Asynchronous
queue Block1
let queue = DispatchQueue(label: "serial-queue")
queue.async { /* block1 */ }
queue.async { /* block2 */ }
queue.async { /* block3 */ }
Block2 Block3
DISPATCHQUEUE
26
Asynchronous
queue
let queue = DispatchQueue(label: "serial-queue")
queue.async { /* block1 */ }
queue.async { /* block2 */ }
queue.async { /* block3 */ }
Block2 Block3
DISPATCHQUEUE
26
Asynchronous
queue
let queue = DispatchQueue(label: "serial-queue")
queue.async { /* block1 */ }
queue.async { /* block2 */ }
queue.async { /* block3 */ }
Block3
DISPATCHQUEUE
26
Asynchronous
queue
let queue = DispatchQueue(label: "serial-queue")
queue.async { /* block1 */ }
queue.async { /* block2 */ }
queue.async { /* block3 */ }
DISPATCHQUEUE
27
Synchronous
queue
let queue = DispatchQueue(label: "serial-queue")
queue.async { /* block1 */ }
queue.sync { /* block2 */ } // sync is a fair lock 😊
queue.async { /* block3 */ }
DISPATCHQUEUE
27
Synchronous
queue Block1
let queue = DispatchQueue(label: "serial-queue")
queue.async { /* block1 */ }
queue.sync { /* block2 */ } // sync is a fair lock 😊
queue.async { /* block3 */ }
DISPATCHQUEUE
27
Synchronous
queue Block1 Block2 Block3
let queue = DispatchQueue(label: "serial-queue")
queue.async { /* block1 */ }
queue.sync { /* block2 */ } // sync is a fair lock 😊
queue.async { /* block3 */ }
Block2
DISPATCHQUEUE
27
Synchronous
queue Block1 Block2 Block3
let queue = DispatchQueue(label: "serial-queue")
queue.async { /* block1 */ }
queue.sync { /* block2 */ } // sync is a fair lock 😊
queue.async { /* block3 */ }
Block2
DISPATCHQUEUE
27
Synchronous
queue Block2 Block3
let queue = DispatchQueue(label: "serial-queue")
queue.async { /* block1 */ }
queue.sync { /* block2 */ } // sync is a fair lock 😊
queue.async { /* block3 */ }
Block2
DISPATCHQUEUE
27
Synchronous
queue
Block2 Block3
let queue = DispatchQueue(label: "serial-queue")
queue.async { /* block1 */ }
queue.sync { /* block2 */ } // sync is a fair lock 😊
queue.async { /* block3 */ }
Block2
DISPATCHQUEUE
27
Synchronous
queue
Block3
let queue = DispatchQueue(label: "serial-queue")
queue.async { /* block1 */ }
queue.sync { /* block2 */ } // sync is a fair lock 😊
queue.async { /* block3 */ }
DISPATCHQUEUE
27
Synchronous
queue Block3
let queue = DispatchQueue(label: "serial-queue")
queue.async { /* block1 */ }
queue.sync { /* block2 */ } // sync is a fair lock 😊
queue.async { /* block3 */ }
DISPATCHQUEUE
27
Synchronous
queue
let queue = DispatchQueue(label: "serial-queue")
queue.async { /* block1 */ }
queue.sync { /* block2 */ } // sync is a fair lock 😊
queue.async { /* block3 */ }
DISPATCHQUEUE
28
Target Queue Hierarchy
queue1 1
queue2
1 A 2 B 3 C
2 3
A B C
DISPATCHQUEUE
29
Target Queue Hierarchy
queue1
queue2
let queue0 = DispatchQueue(label: "queue0")
let queue1 = DispatchQueue(label: "queue1", target: queue0)
let queue2 = DispatchQueue(label: "queue2", target: queue0)
queue0
3
C
2
BA
1
DISPATCHQUEUE
29
Target Queue Hierarchy
queue1
queue2
let queue0 = DispatchQueue(label: "queue0")
let queue1 = DispatchQueue(label: "queue1", target: queue0)
let queue2 = DispatchQueue(label: "queue2", target: queue0)
queue0 3C2BA1
DISPATCHQUEUE
30
Target Queue Hierarchy
let queue0 = DispatchQueue(label: "queue0")
let queue1 = DispatchQueue(label: "queue1", target: queue0)
let queue2 = DispatchQueue(label: "queue2", target: queue0)
queue0 BA1 3C2
1 A B 2 C 3
DISPATCHQUEUE
Recurring problems
31
• Frequently block threads for resource access
• Many context switch between independent operations
04 FUTURE & PROMISE
FUTURE & PROMISE
FUTURE
Wrap a value that may not exist yet
Read-Only
PROMISE
Provide an associated future
Read-Write(Once)
33
FUTURE & PROMISE
Example
34
let promise = Promise<Int>()
let future = promise.future
FUTURE & PROMISE
Example
35
let promise = Promise<Int>()
let future = promise.future
queue1.async {
future.then { i in /* success */ }
.catch { error in /* failure */ }
}
FUTURE & PROMISE
Example
36
let promise = Promise<Int>()
let future = promise.future
queue1.async {
future.then { i in /* success */ }
.catch { error in /* failure */ }
}
queue2.async {
promise.resolve { 1 }
}
FUTURE & PROMISE
Example
37
service.call(request: "…") { result in
switch result {
case let .success(data):
service.call(request: "…") { result in
switch result {…}
/* finally do something */
}
case let .failure(error): /* failure */
}
/* finally do something */
}
FUTURE & PROMISE
Example
38
service.call(request: "…") { result in
switch result {
case let .success(data):
service.call(request: "…") { result in
switch result {…}
/* finally do something */
}
case let .failure(error): /* failure */
}
/* finally do something */
}
• Is the first completion on the same Thread
that the first service.call ?
• Is the second service.call on the same Thread
that the first completion ?
• Is the second completion on the same Thread
that the second service.call ?
FUTURE & PROMISE
Example
39
service.call(request: "…")
.then(qos: .utility) { data in service.call(request: "…") }
.then(qos: .userInteractive) { data in /* success */ }
.catch(qos: .userInteractive) { error in /* failure */ }
.finally(qos: .background) { /* do something */ }
FUTURE & PROMISE
Example
40
service.call(request: "…")
.then(qos: .utility) { data in service.call(request: "…") }
.then(qos: .userInteractive) { data in /* success */ }
.catch(qos: .userInteractive) { error in /* failure */ }
.finally(qos: .background) { /* do something */ }
internalQueue thencallthen finallycatch
POD IN PROGRESS
41
https://cocoapods.org/pods/AsynchronousSwift
Asynchronous swift

Weitere ähnliche Inhalte

Was ist angesagt?

Amazon Cognito使って認証したい?それならSpring Security使いましょう!
Amazon Cognito使って認証したい?それならSpring Security使いましょう!Amazon Cognito使って認証したい?それならSpring Security使いましょう!
Amazon Cognito使って認証したい?それならSpring Security使いましょう!Ryosuke Uchitate
 
React for Dummies
React for DummiesReact for Dummies
React for DummiesMitch Chen
 
Important React Hooks
Important React HooksImportant React Hooks
Important React HooksKnoldus Inc.
 
Spring Framework - Validation
Spring Framework - ValidationSpring Framework - Validation
Spring Framework - ValidationDzmitry Naskou
 
IOS/Androidアプリの3つの大事な設計方針
IOS/Androidアプリの3つの大事な設計方針IOS/Androidアプリの3つの大事な設計方針
IOS/Androidアプリの3つの大事な設計方針Ken Morishita
 
Java practical(baca sem v)
Java practical(baca sem v)Java practical(baca sem v)
Java practical(baca sem v)mehul patel
 
React.js and Redux overview
React.js and Redux overviewReact.js and Redux overview
React.js and Redux overviewAlex Bachuk
 
Introduction to react-query. A Redux alternative? (Nikos Kleidis, Front End D...
Introduction to react-query. A Redux alternative? (Nikos Kleidis, Front End D...Introduction to react-query. A Redux alternative? (Nikos Kleidis, Front End D...
Introduction to react-query. A Redux alternative? (Nikos Kleidis, Front End D...GreeceJS
 
SQLアンチパターン~スパゲッティクエリ
SQLアンチパターン~スパゲッティクエリSQLアンチパターン~スパゲッティクエリ
SQLアンチパターン~スパゲッティクエリItabashi Masayuki
 
Flutter State Management Using GetX.pdf
Flutter State Management Using GetX.pdfFlutter State Management Using GetX.pdf
Flutter State Management Using GetX.pdfKaty Slemon
 
Tomcatの実装から学ぶクラスローダリーク #渋谷Java
Tomcatの実装から学ぶクラスローダリーク #渋谷JavaTomcatの実装から学ぶクラスローダリーク #渋谷Java
Tomcatの実装から学ぶクラスローダリーク #渋谷JavaNorito Agetsuma
 
Introduction to react_js
Introduction to react_jsIntroduction to react_js
Introduction to react_jsMicroPyramid .
 
Clean Code at Silicon Valley Code Camp 2011 (02/17/2012)
Clean Code at Silicon Valley Code Camp 2011 (02/17/2012)Clean Code at Silicon Valley Code Camp 2011 (02/17/2012)
Clean Code at Silicon Valley Code Camp 2011 (02/17/2012)Theo Jungeblut
 
Spring Boot Actuator
Spring Boot ActuatorSpring Boot Actuator
Spring Boot ActuatorRowell Belen
 

Was ist angesagt? (20)

Workshop 21: React Router
Workshop 21: React RouterWorkshop 21: React Router
Workshop 21: React Router
 
Amazon Cognito使って認証したい?それならSpring Security使いましょう!
Amazon Cognito使って認証したい?それならSpring Security使いましょう!Amazon Cognito使って認証したい?それならSpring Security使いましょう!
Amazon Cognito使って認証したい?それならSpring Security使いましょう!
 
React for Dummies
React for DummiesReact for Dummies
React for Dummies
 
Important React Hooks
Important React HooksImportant React Hooks
Important React Hooks
 
Spring Framework - Validation
Spring Framework - ValidationSpring Framework - Validation
Spring Framework - Validation
 
IOS/Androidアプリの3つの大事な設計方針
IOS/Androidアプリの3つの大事な設計方針IOS/Androidアプリの3つの大事な設計方針
IOS/Androidアプリの3つの大事な設計方針
 
Java practical(baca sem v)
Java practical(baca sem v)Java practical(baca sem v)
Java practical(baca sem v)
 
React.js and Redux overview
React.js and Redux overviewReact.js and Redux overview
React.js and Redux overview
 
Introduction to react-query. A Redux alternative? (Nikos Kleidis, Front End D...
Introduction to react-query. A Redux alternative? (Nikos Kleidis, Front End D...Introduction to react-query. A Redux alternative? (Nikos Kleidis, Front End D...
Introduction to react-query. A Redux alternative? (Nikos Kleidis, Front End D...
 
React hooks
React hooksReact hooks
React hooks
 
SQLアンチパターン~スパゲッティクエリ
SQLアンチパターン~スパゲッティクエリSQLアンチパターン~スパゲッティクエリ
SQLアンチパターン~スパゲッティクエリ
 
Jpa
JpaJpa
Jpa
 
Flutter State Management Using GetX.pdf
Flutter State Management Using GetX.pdfFlutter State Management Using GetX.pdf
Flutter State Management Using GetX.pdf
 
Tomcatの実装から学ぶクラスローダリーク #渋谷Java
Tomcatの実装から学ぶクラスローダリーク #渋谷JavaTomcatの実装から学ぶクラスローダリーク #渋谷Java
Tomcatの実装から学ぶクラスローダリーク #渋谷Java
 
Introduction to react_js
Introduction to react_jsIntroduction to react_js
Introduction to react_js
 
Spring Core
Spring CoreSpring Core
Spring Core
 
Clean Code at Silicon Valley Code Camp 2011 (02/17/2012)
Clean Code at Silicon Valley Code Camp 2011 (02/17/2012)Clean Code at Silicon Valley Code Camp 2011 (02/17/2012)
Clean Code at Silicon Valley Code Camp 2011 (02/17/2012)
 
Optional in Java 8
Optional in Java 8Optional in Java 8
Optional in Java 8
 
Spring Boot Actuator
Spring Boot ActuatorSpring Boot Actuator
Spring Boot Actuator
 
Java e orientação a objetos
Java e orientação a objetosJava e orientação a objetos
Java e orientação a objetos
 

Ähnlich wie Asynchronous swift

Checking Oracle VM VirtualBox. Part 1
Checking Oracle VM VirtualBox. Part 1Checking Oracle VM VirtualBox. Part 1
Checking Oracle VM VirtualBox. Part 1Andrey Karpov
 
Counter Wars (JEEConf 2016)
Counter Wars (JEEConf 2016)Counter Wars (JEEConf 2016)
Counter Wars (JEEConf 2016)Alexey Fyodorov
 
Async Debugging A Practical Guide to survive !
Async Debugging A Practical Guide to survive !Async Debugging A Practical Guide to survive !
Async Debugging A Practical Guide to survive !Mirco Vanini
 
Silicon Valley JUG: JVM Mechanics
Silicon Valley JUG: JVM MechanicsSilicon Valley JUG: JVM Mechanics
Silicon Valley JUG: JVM MechanicsAzul Systems, Inc.
 
Blocks & GCD
Blocks & GCDBlocks & GCD
Blocks & GCDrsebbe
 
Endevor api an introduction to the endevor application programming interface
Endevor api   an introduction to the endevor application programming interface Endevor api   an introduction to the endevor application programming interface
Endevor api an introduction to the endevor application programming interface Kevin Grimes
 
Profiling JavaScript Performance
Profiling JavaScript PerformanceProfiling JavaScript Performance
Profiling JavaScript PerformanceFITC
 
Fault Tolerance in a High Volume, Distributed System
Fault Tolerance in a  High Volume, Distributed SystemFault Tolerance in a  High Volume, Distributed System
Fault Tolerance in a High Volume, Distributed SystemBen Christensen
 
play framework async with scala
play framework async with scalaplay framework async with scala
play framework async with scalavuhaininh88
 
Analysis of Haiku Operating System (BeOS Family) by PVS-Studio. Part 2
Analysis of Haiku Operating System (BeOS Family) by PVS-Studio. Part 2Analysis of Haiku Operating System (BeOS Family) by PVS-Studio. Part 2
Analysis of Haiku Operating System (BeOS Family) by PVS-Studio. Part 2PVS-Studio
 
The State of Lightweight Threads for the JVM
The State of Lightweight Threads for the JVMThe State of Lightweight Threads for the JVM
The State of Lightweight Threads for the JVMVolkan Yazıcı
 
002 hbase clientapi
002 hbase clientapi002 hbase clientapi
002 hbase clientapiScott Miao
 
Async Debugging - A Practical Guide to survive !
Async Debugging - A Practical Guide to survive !Async Debugging - A Practical Guide to survive !
Async Debugging - A Practical Guide to survive !Mirco Vanini
 
Oracle Database In-Memory Option in Action
Oracle Database In-Memory Option in ActionOracle Database In-Memory Option in Action
Oracle Database In-Memory Option in ActionTanel Poder
 
In Memory Database In Action by Tanel Poder and Kerry Osborne
In Memory Database In Action by Tanel Poder and Kerry OsborneIn Memory Database In Action by Tanel Poder and Kerry Osborne
In Memory Database In Action by Tanel Poder and Kerry OsborneEnkitec
 
Asterisk: PVS-Studio Takes Up Telephony
Asterisk: PVS-Studio Takes Up TelephonyAsterisk: PVS-Studio Takes Up Telephony
Asterisk: PVS-Studio Takes Up TelephonyAndrey Karpov
 

Ähnlich wie Asynchronous swift (20)

Checking Oracle VM VirtualBox. Part 1
Checking Oracle VM VirtualBox. Part 1Checking Oracle VM VirtualBox. Part 1
Checking Oracle VM VirtualBox. Part 1
 
VLSI lab manual
VLSI lab manualVLSI lab manual
VLSI lab manual
 
Counter Wars (JEEConf 2016)
Counter Wars (JEEConf 2016)Counter Wars (JEEConf 2016)
Counter Wars (JEEConf 2016)
 
Async Debugging A Practical Guide to survive !
Async Debugging A Practical Guide to survive !Async Debugging A Practical Guide to survive !
Async Debugging A Practical Guide to survive !
 
Silicon Valley JUG: JVM Mechanics
Silicon Valley JUG: JVM MechanicsSilicon Valley JUG: JVM Mechanics
Silicon Valley JUG: JVM Mechanics
 
Taming AEM deployments
Taming AEM deploymentsTaming AEM deployments
Taming AEM deployments
 
Curator intro
Curator introCurator intro
Curator intro
 
Blocks & GCD
Blocks & GCDBlocks & GCD
Blocks & GCD
 
Endevor api an introduction to the endevor application programming interface
Endevor api   an introduction to the endevor application programming interface Endevor api   an introduction to the endevor application programming interface
Endevor api an introduction to the endevor application programming interface
 
Profiling JavaScript Performance
Profiling JavaScript PerformanceProfiling JavaScript Performance
Profiling JavaScript Performance
 
Fault Tolerance in a High Volume, Distributed System
Fault Tolerance in a  High Volume, Distributed SystemFault Tolerance in a  High Volume, Distributed System
Fault Tolerance in a High Volume, Distributed System
 
无锁编程
无锁编程无锁编程
无锁编程
 
play framework async with scala
play framework async with scalaplay framework async with scala
play framework async with scala
 
Analysis of Haiku Operating System (BeOS Family) by PVS-Studio. Part 2
Analysis of Haiku Operating System (BeOS Family) by PVS-Studio. Part 2Analysis of Haiku Operating System (BeOS Family) by PVS-Studio. Part 2
Analysis of Haiku Operating System (BeOS Family) by PVS-Studio. Part 2
 
The State of Lightweight Threads for the JVM
The State of Lightweight Threads for the JVMThe State of Lightweight Threads for the JVM
The State of Lightweight Threads for the JVM
 
002 hbase clientapi
002 hbase clientapi002 hbase clientapi
002 hbase clientapi
 
Async Debugging - A Practical Guide to survive !
Async Debugging - A Practical Guide to survive !Async Debugging - A Practical Guide to survive !
Async Debugging - A Practical Guide to survive !
 
Oracle Database In-Memory Option in Action
Oracle Database In-Memory Option in ActionOracle Database In-Memory Option in Action
Oracle Database In-Memory Option in Action
 
In Memory Database In Action by Tanel Poder and Kerry Osborne
In Memory Database In Action by Tanel Poder and Kerry OsborneIn Memory Database In Action by Tanel Poder and Kerry Osborne
In Memory Database In Action by Tanel Poder and Kerry Osborne
 
Asterisk: PVS-Studio Takes Up Telephony
Asterisk: PVS-Studio Takes Up TelephonyAsterisk: PVS-Studio Takes Up Telephony
Asterisk: PVS-Studio Takes Up Telephony
 

Mehr von CocoaHeads France

Mehr von CocoaHeads France (20)

Mutation testing for a safer Future
Mutation testing for a safer FutureMutation testing for a safer Future
Mutation testing for a safer Future
 
iOS App Group for Debugging
iOS App Group for DebuggingiOS App Group for Debugging
iOS App Group for Debugging
 
Visual accessibility in iOS11
Visual accessibility in iOS11Visual accessibility in iOS11
Visual accessibility in iOS11
 
My script - One year of CocoaHeads
My script - One year of CocoaHeadsMy script - One year of CocoaHeads
My script - One year of CocoaHeads
 
Ui testing dealing with push notifications
Ui testing dealing with push notificationsUi testing dealing with push notifications
Ui testing dealing with push notifications
 
CONTINUOUS DELIVERY WITH FASTLANE
CONTINUOUS DELIVERY WITH FASTLANECONTINUOUS DELIVERY WITH FASTLANE
CONTINUOUS DELIVERY WITH FASTLANE
 
L'intégration continue avec Bitrise
L'intégration continue avec BitriseL'intégration continue avec Bitrise
L'intégration continue avec Bitrise
 
Super combinators
Super combinatorsSuper combinators
Super combinators
 
Design like a developer
Design like a developerDesign like a developer
Design like a developer
 
Handle the error
Handle the errorHandle the error
Handle the error
 
Quoi de neuf dans iOS 10.3
Quoi de neuf dans iOS 10.3Quoi de neuf dans iOS 10.3
Quoi de neuf dans iOS 10.3
 
IoT Best practices
 IoT Best practices IoT Best practices
IoT Best practices
 
SwiftyGPIO
SwiftyGPIOSwiftyGPIO
SwiftyGPIO
 
Présentation de HomeKit
Présentation de HomeKitPrésentation de HomeKit
Présentation de HomeKit
 
Programme MFI retour d'expérience
Programme MFI retour d'expérienceProgramme MFI retour d'expérience
Programme MFI retour d'expérience
 
How to communicate with Smart things?
How to communicate with Smart things?How to communicate with Smart things?
How to communicate with Smart things?
 
Build a lego app with CocoaPods
Build a lego app with CocoaPodsBuild a lego app with CocoaPods
Build a lego app with CocoaPods
 
Let's migrate to Swift 3.0
Let's migrate to Swift 3.0Let's migrate to Swift 3.0
Let's migrate to Swift 3.0
 
Project Entourage
Project EntourageProject Entourage
Project Entourage
 
What's new in iOS9
What's new in iOS9What's new in iOS9
What's new in iOS9
 

Kürzlich hochgeladen

Advancing Engineering with AI through the Next Generation of Strategic Projec...
Advancing Engineering with AI through the Next Generation of Strategic Projec...Advancing Engineering with AI through the Next Generation of Strategic Projec...
Advancing Engineering with AI through the Next Generation of Strategic Projec...OnePlan Solutions
 
Tech Tuesday-Harness the Power of Effective Resource Planning with OnePlan’s ...
Tech Tuesday-Harness the Power of Effective Resource Planning with OnePlan’s ...Tech Tuesday-Harness the Power of Effective Resource Planning with OnePlan’s ...
Tech Tuesday-Harness the Power of Effective Resource Planning with OnePlan’s ...OnePlan Solutions
 
The Ultimate Test Automation Guide_ Best Practices and Tips.pdf
The Ultimate Test Automation Guide_ Best Practices and Tips.pdfThe Ultimate Test Automation Guide_ Best Practices and Tips.pdf
The Ultimate Test Automation Guide_ Best Practices and Tips.pdfkalichargn70th171
 
What is Binary Language? Computer Number Systems
What is Binary Language?  Computer Number SystemsWhat is Binary Language?  Computer Number Systems
What is Binary Language? Computer Number SystemsJheuzeDellosa
 
Russian Call Girls in Karol Bagh Aasnvi ➡️ 8264348440 💋📞 Independent Escort S...
Russian Call Girls in Karol Bagh Aasnvi ➡️ 8264348440 💋📞 Independent Escort S...Russian Call Girls in Karol Bagh Aasnvi ➡️ 8264348440 💋📞 Independent Escort S...
Russian Call Girls in Karol Bagh Aasnvi ➡️ 8264348440 💋📞 Independent Escort S...soniya singh
 
Diamond Application Development Crafting Solutions with Precision
Diamond Application Development Crafting Solutions with PrecisionDiamond Application Development Crafting Solutions with Precision
Diamond Application Development Crafting Solutions with PrecisionSolGuruz
 
SyndBuddy AI 2k Review 2024: Revolutionizing Content Syndication with AI
SyndBuddy AI 2k Review 2024: Revolutionizing Content Syndication with AISyndBuddy AI 2k Review 2024: Revolutionizing Content Syndication with AI
SyndBuddy AI 2k Review 2024: Revolutionizing Content Syndication with AIABDERRAOUF MEHENNI
 
A Secure and Reliable Document Management System is Essential.docx
A Secure and Reliable Document Management System is Essential.docxA Secure and Reliable Document Management System is Essential.docx
A Secure and Reliable Document Management System is Essential.docxComplianceQuest1
 
Right Money Management App For Your Financial Goals
Right Money Management App For Your Financial GoalsRight Money Management App For Your Financial Goals
Right Money Management App For Your Financial GoalsJhone kinadey
 
Short Story: Unveiling the Reasoning Abilities of Large Language Models by Ke...
Short Story: Unveiling the Reasoning Abilities of Large Language Models by Ke...Short Story: Unveiling the Reasoning Abilities of Large Language Models by Ke...
Short Story: Unveiling the Reasoning Abilities of Large Language Models by Ke...kellynguyen01
 
How To Troubleshoot Collaboration Apps for the Modern Connected Worker
How To Troubleshoot Collaboration Apps for the Modern Connected WorkerHow To Troubleshoot Collaboration Apps for the Modern Connected Worker
How To Troubleshoot Collaboration Apps for the Modern Connected WorkerThousandEyes
 
Hand gesture recognition PROJECT PPT.pptx
Hand gesture recognition PROJECT PPT.pptxHand gesture recognition PROJECT PPT.pptx
Hand gesture recognition PROJECT PPT.pptxbodapatigopi8531
 
Building Real-Time Data Pipelines: Stream & Batch Processing workshop Slide
Building Real-Time Data Pipelines: Stream & Batch Processing workshop SlideBuilding Real-Time Data Pipelines: Stream & Batch Processing workshop Slide
Building Real-Time Data Pipelines: Stream & Batch Processing workshop SlideChristina Lin
 
TECUNIQUE: Success Stories: IT Service provider
TECUNIQUE: Success Stories: IT Service providerTECUNIQUE: Success Stories: IT Service provider
TECUNIQUE: Success Stories: IT Service providermohitmore19
 
Unlocking the Future of AI Agents with Large Language Models
Unlocking the Future of AI Agents with Large Language ModelsUnlocking the Future of AI Agents with Large Language Models
Unlocking the Future of AI Agents with Large Language Modelsaagamshah0812
 
why an Opensea Clone Script might be your perfect match.pdf
why an Opensea Clone Script might be your perfect match.pdfwhy an Opensea Clone Script might be your perfect match.pdf
why an Opensea Clone Script might be your perfect match.pdfjoe51371421
 
Optimizing AI for immediate response in Smart CCTV
Optimizing AI for immediate response in Smart CCTVOptimizing AI for immediate response in Smart CCTV
Optimizing AI for immediate response in Smart CCTVshikhaohhpro
 
CALL ON ➥8923113531 🔝Call Girls Kakori Lucknow best sexual service Online ☂️
CALL ON ➥8923113531 🔝Call Girls Kakori Lucknow best sexual service Online  ☂️CALL ON ➥8923113531 🔝Call Girls Kakori Lucknow best sexual service Online  ☂️
CALL ON ➥8923113531 🔝Call Girls Kakori Lucknow best sexual service Online ☂️anilsa9823
 

Kürzlich hochgeladen (20)

Advancing Engineering with AI through the Next Generation of Strategic Projec...
Advancing Engineering with AI through the Next Generation of Strategic Projec...Advancing Engineering with AI through the Next Generation of Strategic Projec...
Advancing Engineering with AI through the Next Generation of Strategic Projec...
 
Tech Tuesday-Harness the Power of Effective Resource Planning with OnePlan’s ...
Tech Tuesday-Harness the Power of Effective Resource Planning with OnePlan’s ...Tech Tuesday-Harness the Power of Effective Resource Planning with OnePlan’s ...
Tech Tuesday-Harness the Power of Effective Resource Planning with OnePlan’s ...
 
The Ultimate Test Automation Guide_ Best Practices and Tips.pdf
The Ultimate Test Automation Guide_ Best Practices and Tips.pdfThe Ultimate Test Automation Guide_ Best Practices and Tips.pdf
The Ultimate Test Automation Guide_ Best Practices and Tips.pdf
 
Call Girls In Mukherjee Nagar 📱 9999965857 🤩 Delhi 🫦 HOT AND SEXY VVIP 🍎 SE...
Call Girls In Mukherjee Nagar 📱  9999965857  🤩 Delhi 🫦 HOT AND SEXY VVIP 🍎 SE...Call Girls In Mukherjee Nagar 📱  9999965857  🤩 Delhi 🫦 HOT AND SEXY VVIP 🍎 SE...
Call Girls In Mukherjee Nagar 📱 9999965857 🤩 Delhi 🫦 HOT AND SEXY VVIP 🍎 SE...
 
What is Binary Language? Computer Number Systems
What is Binary Language?  Computer Number SystemsWhat is Binary Language?  Computer Number Systems
What is Binary Language? Computer Number Systems
 
Russian Call Girls in Karol Bagh Aasnvi ➡️ 8264348440 💋📞 Independent Escort S...
Russian Call Girls in Karol Bagh Aasnvi ➡️ 8264348440 💋📞 Independent Escort S...Russian Call Girls in Karol Bagh Aasnvi ➡️ 8264348440 💋📞 Independent Escort S...
Russian Call Girls in Karol Bagh Aasnvi ➡️ 8264348440 💋📞 Independent Escort S...
 
Exploring iOS App Development: Simplifying the Process
Exploring iOS App Development: Simplifying the ProcessExploring iOS App Development: Simplifying the Process
Exploring iOS App Development: Simplifying the Process
 
Diamond Application Development Crafting Solutions with Precision
Diamond Application Development Crafting Solutions with PrecisionDiamond Application Development Crafting Solutions with Precision
Diamond Application Development Crafting Solutions with Precision
 
SyndBuddy AI 2k Review 2024: Revolutionizing Content Syndication with AI
SyndBuddy AI 2k Review 2024: Revolutionizing Content Syndication with AISyndBuddy AI 2k Review 2024: Revolutionizing Content Syndication with AI
SyndBuddy AI 2k Review 2024: Revolutionizing Content Syndication with AI
 
A Secure and Reliable Document Management System is Essential.docx
A Secure and Reliable Document Management System is Essential.docxA Secure and Reliable Document Management System is Essential.docx
A Secure and Reliable Document Management System is Essential.docx
 
Right Money Management App For Your Financial Goals
Right Money Management App For Your Financial GoalsRight Money Management App For Your Financial Goals
Right Money Management App For Your Financial Goals
 
Short Story: Unveiling the Reasoning Abilities of Large Language Models by Ke...
Short Story: Unveiling the Reasoning Abilities of Large Language Models by Ke...Short Story: Unveiling the Reasoning Abilities of Large Language Models by Ke...
Short Story: Unveiling the Reasoning Abilities of Large Language Models by Ke...
 
How To Troubleshoot Collaboration Apps for the Modern Connected Worker
How To Troubleshoot Collaboration Apps for the Modern Connected WorkerHow To Troubleshoot Collaboration Apps for the Modern Connected Worker
How To Troubleshoot Collaboration Apps for the Modern Connected Worker
 
Hand gesture recognition PROJECT PPT.pptx
Hand gesture recognition PROJECT PPT.pptxHand gesture recognition PROJECT PPT.pptx
Hand gesture recognition PROJECT PPT.pptx
 
Building Real-Time Data Pipelines: Stream & Batch Processing workshop Slide
Building Real-Time Data Pipelines: Stream & Batch Processing workshop SlideBuilding Real-Time Data Pipelines: Stream & Batch Processing workshop Slide
Building Real-Time Data Pipelines: Stream & Batch Processing workshop Slide
 
TECUNIQUE: Success Stories: IT Service provider
TECUNIQUE: Success Stories: IT Service providerTECUNIQUE: Success Stories: IT Service provider
TECUNIQUE: Success Stories: IT Service provider
 
Unlocking the Future of AI Agents with Large Language Models
Unlocking the Future of AI Agents with Large Language ModelsUnlocking the Future of AI Agents with Large Language Models
Unlocking the Future of AI Agents with Large Language Models
 
why an Opensea Clone Script might be your perfect match.pdf
why an Opensea Clone Script might be your perfect match.pdfwhy an Opensea Clone Script might be your perfect match.pdf
why an Opensea Clone Script might be your perfect match.pdf
 
Optimizing AI for immediate response in Smart CCTV
Optimizing AI for immediate response in Smart CCTVOptimizing AI for immediate response in Smart CCTV
Optimizing AI for immediate response in Smart CCTV
 
CALL ON ➥8923113531 🔝Call Girls Kakori Lucknow best sexual service Online ☂️
CALL ON ➥8923113531 🔝Call Girls Kakori Lucknow best sexual service Online  ☂️CALL ON ➥8923113531 🔝Call Girls Kakori Lucknow best sexual service Online  ☂️
CALL ON ➥8923113531 🔝Call Girls Kakori Lucknow best sexual service Online ☂️
 

Asynchronous swift