zoukankan      html  css  js  c++  java
  • 多线程简单介绍

          在单个程序中同时运行多个线程来完成工作就叫做多线程。

          

      多线程是一个比较轻量级的方法来实现单个应用程序内多个代码执行路径。
      在系统级别内,程序并排执行,程序分配到每个程序的执行时间是基于该程序的所需时间和其他程序的所需时间来决定的。
      然而,在每个程序内部,存在一个或者多个执行线程,它同时或在一个几乎同时发生的方式里执行不同的任务。

      线程概述:
    有些程序是一条直线,起点到终点——如简单的hello world,运行打印完,它的生命周期便结束了,像是昙花一现。
    有些程序是一个圆,不断循环直到将它切断——如操作系统,一直运行直到你关机。
    一个运行着的程序就是一个进程或者叫做一个任务,一个进程至少包含一个线程,线程就是程序的执行流。
      Mac和IOS中的程序启动,创建好一个进程的同时,一个线程便开始运作,这个线程叫做主线程。主线成在程序中的位置和其他线程不同,它是其他线程  最终的父线程,且所有的界面的显示操作即AppKit或UIKit的操作必须在主线程进行。
    系统中每一个进程都有自己独立的虚拟内存空间,而同一个进程中的多个线程则公用进程的内存空间。
    每创建一个新的进成,都需要一些内存(如每个线程有自己的stack空间)和消耗一定的CPU时间
    当多个进成对同一个资源出现争夺的时候需要注意线程安全问题。
      创建线程
    创建一个新的线程就是给进程增加一个执行流,所以新建一个线程需要提供一个函数或者方法作为线程的进口。
    
    

          多任务的是通过时间片的方式运行的,而假如一个单核的cpu是将多个任务分在一个线程中的多个时间段,这样的时间段是通过微秒为单位计量的,所以我们在操作时并不会感到卡顿,可以流畅的进行操作。让我们感觉到在进行多任务操作时是同时运行的。

          优势: 多线程可以提高应用程序的感知响应,可以提高应用程序在多核系统的实时性能。

          劣势:拥有多个可执行路径,增加了代码的复杂度,线程问题很难调试,因为线程问题很难重现。共享内存空间,产生数据安全性问题(比如不同线程一个进行读取一个进行修改,会造成数据安全问题)。因此要避免过度使用多线程。

          iOS多线程规则:必须在主线程里面更新ui。

          iOS多线程常用线程实现方式,主要有三种类型:

                             1.GCD

                             2.NSOperationQueue

                             3.NSThread

          GCD的多线程:

                 优点:便于使用

          NSOperationQueue多线程:

                 在gcd基础上实现的

                 优点:更好的控制和处理大量的并发操作

                 缺点:比gcd速度慢。

           NSThread多线程:

                 比上两个轻量级,但是需要自己管理线程的生命周期,线程同步,相对复杂。

  • 相关阅读:
    经典的HTML5游戏及其源码分析
    Java支付宝支付功能开发
    vue cli4升级sass-loader(v8)后报错
    postman请求参数中文乱码
    spring-boot整合log4j和logback
    java架构师
    IntelliJ IDEA “duplicated code fragment(6 lines long)”提示如何关闭
    在Java聚合工程里使用mybatis-generator
    对spring-boot的自动装配理解
    spring-boot里配置事务管理
  • 原文地址:https://www.cnblogs.com/moxuexiaotong/p/4920142.html
Copyright © 2011-2022 走看看