20170127 tokyoserversideswiftmeetup資料

33

Upload: jugemjugemjugem

Post on 13-Apr-2017

142 views

Category:

Technology


0 download

TRANSCRIPT

Page 1: 20170127 tokyoserversideswiftmeetup資料
Page 3: 20170127 tokyoserversideswiftmeetup資料
Page 5: 20170127 tokyoserversideswiftmeetup資料
Page 6: 20170127 tokyoserversideswiftmeetup資料
Page 7: 20170127 tokyoserversideswiftmeetup資料
Page 8: 20170127 tokyoserversideswiftmeetup資料
Page 9: 20170127 tokyoserversideswiftmeetup資料
Page 10: 20170127 tokyoserversideswiftmeetup資料
Page 11: 20170127 tokyoserversideswiftmeetup資料
Page 12: 20170127 tokyoserversideswiftmeetup資料
Page 13: 20170127 tokyoserversideswiftmeetup資料
Page 14: 20170127 tokyoserversideswiftmeetup資料
Page 15: 20170127 tokyoserversideswiftmeetup資料
Page 16: 20170127 tokyoserversideswiftmeetup資料
Page 17: 20170127 tokyoserversideswiftmeetup資料

Swift C var kev = kevent(); kev.ident = UInt(socket); kev.filter = Int16(EVFILT_READ); kev.flags = UInt16(flags); kev.data = 0; ret = kevent(kq, &kev, 1, nil, 0, nil)

C

Page 18: 20170127 tokyoserversideswiftmeetup資料

thread poolGCD pthread(C

mutexpthread_cond ( C 1

1

Page 19: 20170127 tokyoserversideswiftmeetup資料

Swift O(1)data race)

mutex

class AsyncQueue<T> : AsyncQueueType<T> { var queue = [T]()

override func put(obj: T) throws { mutex.lock() defer { mutex.unlock() } queue += [obj] } override func get() throws -> T? { mutex.lock() defer { mutex.unlock() } queue.remove(at: 0) }

Page 20: 20170127 tokyoserversideswiftmeetup資料
Page 21: 20170127 tokyoserversideswiftmeetup資料
Page 22: 20170127 tokyoserversideswiftmeetup資料
Page 23: 20170127 tokyoserversideswiftmeetup資料
Page 24: 20170127 tokyoserversideswiftmeetup資料
Page 25: 20170127 tokyoserversideswiftmeetup資料
Page 26: 20170127 tokyoserversideswiftmeetup資料

protocol GenericQueue{ associatedtype A }

class QueueA<B> : GenericQueue{ typealias A = B }

class QueueB<B> : GenericQueue{ // Queue typealias A = B }

typealias ClosureType = () -> Void

class QueueUser { func useQueue(queue: GenericQueue<ClosureType>) { // ❌ } }

Page 27: 20170127 tokyoserversideswiftmeetup資料
Page 28: 20170127 tokyoserversideswiftmeetup資料
Page 29: 20170127 tokyoserversideswiftmeetup資料
Page 30: 20170127 tokyoserversideswiftmeetup資料
Page 31: 20170127 tokyoserversideswiftmeetup資料

Swift Array O(1)

Swift Array RangeReplaceableCollection extension

public struct Array<Element> : RandomAccessCollection, MutableCollection { extension Array : RangeReplaceableCollection {

Swift Array github: swift/stdlib/public/core/Arrays.swift.gyb

gyb = Generate Your Boilerplate Python

Python

Page 32: 20170127 tokyoserversideswiftmeetup資料

Arrays.swift.gyb extension ${Self} : RangeReplaceableCollection, _ArrayProtocol {     public mutating func append<S : Sequence>(contentsOf newElements: S)         where S.Iterator.Element == Element {             let oldCount = self.count             let capacity = self.capacity             let newCount = oldCount + newElements.underestimatedCount                         if newCount > capacity {                 self.reserveCapacity(                     Swift.max(newCount, _growArrayCapacity(capacity)))             }             _arrayAppendSequence(&self._buffer, newElements) }

_growArrayCapacity

internal func _growArrayCapacity(_ capacity: Int) -> Int {     return capacity * 2 }

capacity 2 O(1)

Wikipedia Amortized analysis https://en.wikipedia.org/wiki/Amortized_analysis

Page 33: 20170127 tokyoserversideswiftmeetup資料