高洛峰2017-04-28 09:07:18
스레드 동기화는 멀티스레딩에서 발생합니다. 여러 스레드가 동시에 동일한 리소스에 액세스하므로 안전하고 효율적인 액세스를 보장하기 위해서는 동기 액세스로 인해 발생하는 일련의 문제를 해결해야 합니다.
예를 들어 두 사람이 바구니에서 사과를 가져가는 경우, 한 사람이 사과를 가져가고 다른 사람이 가져가도록 하면 문제가 없지만 효율성은 높지 않습니다. (totalTime = timeOfA + timeOfB)
둘이 동시에 가져가게 하면 내가 하나 가져가고, 이게 더 효율적이겠지만, 두 사람이 사과를 잡으면 문제가 발생합니다. A가 사과를 가져갈 때 B는 먼저 기다렸다가 B가 사과를 가져갈 때까지 기다립니다. 또는 A는 A쪽에 있는 것만 가져갈 수 있고 B는 B쪽에 있는 것만 가져갈 수 있습니다. 이렇게 하면 문제가 해결됩니다.
iOS에서 가장 중요한 방법은 접근 중에는 잠그고 접근이 완료된 후에는 잠금을 해제하는 것입니다. 추가할 잠금 장치와 잠그는 방법에 대해서는 인터넷에 있는 많은 정보가 매우 자세합니다.
为情所困2017-04-28 09:07:18
同步
异步
线程同步
은 개념이 다릅니다
위층에서 반 친구들을 픽업하는 예
당신이 사과를 먹고, 내가 사과를 가져가는 것을 同步
실행
당신과 내가 동시에 사과를 가져가는 것을 异步
실행이라고 합니다. 异步
여기서 多线程
는 당신과 내가 각각 하나의 스레드에 속한다는 뜻입니다
그러면 문제가 발생합니다. 당신과 내가 같은 사과에 도달하면 어떻게 될까요? 이때 당신과 나는 线程同步
해야 합니다. 예를 들어 바구니를 먼저 본 사람이 바구니를 잠그고, 다른 사람이 기다리게 하고, 가져간 후 잠금을 해제합니다
ringa_lee2017-04-28 09:07:18
많은 사람들이 비동기가 멀티스레딩을 의미한다고 생각합니다. 이것은 잘못된 것입니다.
스레드는 CPU가 실행해야 하는 코드입니다. 두 개의 스레드 코드를 함께 실행하면 사람들이 차단되지 않는 느낌을 받을 수 있습니다. 하지만 여전히 코드입니다. CPU는 여전히 그곳에서 기다리고 있습니다.
비동기식은 주로 io, 파일 io 및 네트워크 요청 io에 사용됩니다. 동기식 io가 프로세스를 차단하는 것을 원하지 않으므로 응답성을 향상시키는 비동기식 방법이 있습니다. 비동기식을 사용하려면 운영 체제에서 이벤트 위임을 구독해야 합니다. 클로저 기능은 멀티스레딩에서도 마찬가지입니다.
하드웨어에 대해 조금이라도 알면 방해를 느낄 수 있습니다.
모두가 이야기하는 사과를 예로 들어보겠습니다.
비동기란 컴퓨터에 사과를 가져다 달라고 말하는 것을 의미합니다.
컴퓨터는 Apple 하드웨어를 사용하여 이 기능에 응답합니다. CPU와 관련이 있나요? 더 이상은 없습니다. CPU를 지연시키지 않습니다.
Apple이 네트워크에서 요청할 때 Apple을 가져가는 것은 네트워크 카드입니다