ECS 189e
Sam King
Processes, threads, and event-driven programming: general concepts
Administrative
We created your groups so all project assignments are submitted as a group
Administrative
Last time: API calls
This time: The history of threads and event driven programming
Next time: Concurrency in iOS
Next next time: Synchronization in iOS
Threads and concurrency
Job 1
Job 2
Job 3
What’s in a process?
Multiple threads
A little bit of history
General flow for handling a web server request
handleWebRequest() {
socket = newClientConnection(serverSock)
request = readHTTPRequest(socket)
object = accessDatabase(request)
response = accessFilesystem(request)
sendResponse(socket, response)
}
Request 1
Start disk I/O req 1
Disk I/O ret req 1
Reply to req 1
Request 2
Process req 1
Process req 2
Request 1
Proc req 1
Start I/O 1a
Request 2
Proc req 2
Start I/O 2a
Request 3
Proc req 3
Start I/O 3a
Disk I/O 1a ret
Reply req 1
activeFds.add(serverSock)
handleWebRequest() {
activeFd = select(activeFds)
// giant state machine to track pending
// requests (yuck)
switch (activeFd) {
case serverSock:
// new request
case isHttpRequest(activeFd):
// read request, store state when done
case isDatabaseFd(activeFd):
// handle response from database
…
}
Web server using threads
Request 1
Proc req 1
Start I/O 1a
Request 2
Proc req 2
Start I/O 2a
Request 3
Proc req 3
Start I/O 3a
Reply req 1
I/O 1a ret
handleWebRequest() {
while (true) {
socket = newClientConnection(serverSock)
createNewThread(webRequestThread, socket)
}
}
webRequestThread(socket) {
request = readHTTPRequest(socket)
object = accessDatabase(request)
response = accessFilesystem(request)
sendResponse(socket, response)
}
Is Swift on iOS multi-threaded or event driven?
Sketch out from a high level what your iOS Swift-based web server would look like
A Swift based server
Socket.acceptRequest() { request in
Request.lookupData(request) { data in
Request.fetchTemplate(data) { template in
request.respond(data, template)
}
}
}
Web server programming model advantages and disadvantages
Benefits and uses of threads