1. Prefácio
Recentemente, eu estava entrevistando e revisei o Multi-Threading novamente, na esperança de aprofundar minha compreensão do multi-threading.
1. O que é um processo?
1). Para entender tópicos, devemos primeiro entender o processo. Nos termos do leigo, um processo é um aplicativo em execução no sistema.
2). Cada encadeamento existe independentemente e é executado em seu espaço de memória dedicado e protegido.
3). Por exemplo, ao abrir o sistema QQ ou Xcode, dois processos serão abertos separadamente, como mostrado na figura:
4) Podemos visualizar os processos ativados no sistema MAC através do "Monitor de Atividades".
2. O que é um tópico?
1). Um processo deve ter threads para executar tarefas, ou seja, um processo deve ter pelo menos um thread.
2). Os threads são a unidade de execução básica de um processo e todas as tarefas de um processo (programa) são executadas no thread.
3). Por exemplo, usando Kugou para tocar música e usar o Thunder para baixar filmes exigem a corrida no tópico, como mostrado na figura:
3. O que é serial thread?
1). Um encadeamento é executado em série (executado sequencialmente), o que significa que um thread pode executar apenas uma tarefa no mesmo tempo.
2). Diagrama de execução serial, como um thread, download 3 arquivos (arquivos A, B, C)
4. O que é multi-threading?
1). Vários encadeamentos podem ser abertos em um processo e cada encadeamento pode executar tarefas diferentes simultaneamente (simultaneamente).
2). Lista de relacionamento semelhante: processo ----> workshop; Tópico ----> Workshop Workers
3). Diagrama multithread, como abrir 3 threads ao mesmo tempo para baixar 3 arquivos (arquivos A, B, C)
5. Princípio de multithreading
1). Ao mesmo tempo, a CPU pode executar apenas um thread e apenas um thread está funcionando (execução).
2). A execução simultânea (simultânea) de multithread é na verdade a CPU agendas rapidamente (comutadores) entre vários threads.
3). Se a CPU agendar threads com rapidez suficiente, isso causará a ilusão de execução simultânea de vários thread.
4). Desvantagens do multithreading:
1. Cada encadeamento ocupará uma certa quantidade de espaço de memória (por padrão: o encadeamento principal ocupa 1 MB e o fio infantil ocupa 512kb).
Se muitos threads estiverem ativados, ele ocupará muito espaço de memória, o que fará com que o desempenho do programa seja degradado.
2. Quanto mais fios, maior a sobrecarga da linha de agendamento da CPU (semelhante aos trabalhadores mais fábricos, maior a sobrecarga da fábrica).
3. Torne a programação mais complexa: como comunicação de dados multithread e compartilhamento de dados entre vários threads.
5). Vantagens do multithreading:
1. Pode melhorar adequadamente a eficiência da execução do programa.
2. Pode melhorar adequadamente a utilização de recursos (CPU e utilização da memória)
6. Qual é o tópico principal?
1). Um encadeamento será aberto por padrão após a abertura de um programa iOS. Este tópico é chamado de "thread principal" ou "thread da interface do usuário".
2). As principais funções do tópico principal:
1. Exibir/atualizar a interface da interface do usuário
2. Lidar com eventos da interface do usuário (como eventos de clique, eventos de rolagem, eventos de arrasto etc.)
3). Notas no tópico principal:
1. Não coloque operações demoradas no tópico principal. Operações demoradas no encadeamento principal causarão o atraso do programa.
7. Demoção de operação demorada
1) demonstração em execução diretamente no tópico principal
-(void) TouchesBegan: (nsset <uitouch *> *) toca com o evento: (uieVent *) Evento {// Obtenha o método de execução atual e o thread atual // número == Thread // Número! Operação da interface do usuário para gaguejar [auto-operação de longa data];}#Pragma Mark-time-Consuming Operação- (void) LongTimeOperation {for (int i =; i <; i ++) {nslog (@"%d", i);}}2) demonstração em tópico infantil
-(void) TouchesBegan: (nsset <uitouch *> *) toca com o evento: (uieVent *) Evento {// Obtenha o método de execução atual e o thread atual // número == Threads // número! No encadeamento infantil a ser executado sem afetar a operação da interface do usuário [auto-executionSelectorInbackground: @selector (longtimeoperation) com object: nil];}##Pragma Mark-in-suming Operação- (void) longTimeoperation {para (int i =; i <; i ++) {nslog (@"%d", i);O conteúdo acima é o conhecimento de múltiplos threading do iOS apresentado a você pelo editor. Espero que seja útil para você!