String { return "👾 : " + Thread.current.threadName + "\n🚥 : " + Thread.current.queueName + "\n" }"> String { return "👾 : " + Thread.current.threadName + "\n🚥 : " + Thread.current.queueName + "\n" }"> String { return "👾 : " + Thread.current.threadName + "\n🚥 : " + Thread.current.queueName + "\n" }">
extension Thread {
    open var threadName: String {
        if isMainThread {
            return "main"
        } else if let threadName = Thread.current.name, !threadName.isEmpty {
            return threadName
        } else {
            return description
        }
    }
    
    open var queueName: String {
        if let queueName = String(validatingUTF8: __dispatch_queue_get_label(nil)) {
            return queueName
        } else if let operationQueueName = OperationQueue.current?.name, !operationQueueName.isEmpty {
            return operationQueueName
        } else if let dispatchQueueName = OperationQueue.current?.underlyingQueue?.label, !dispatchQueueName.isEmpty {
            return dispatchQueueName
        } else {
            return "n/a"
        }
    }
}

func currentThreadInfo() -> String {
    return "👾 : " + Thread.current.threadName + "\\n🚥 : " + Thread.current.queueName + "\\n"
}

Concurrency & Parellel

GCD 기본

GCD 심화

Operation