• 多线程


    (一)同步/异步

      (1)同步:代码依次顺序执行。

      (2)异步:

    (二)进程/线程

      (1)进程:正在运行的应用程序。每个进程之间是独立的,内存受保护,不能随意互相访问。

      (2)线程:是进程的基本执行单元,一个进程的所有任务都在线程中完成,一个进程有多个线程。

      一个进程可以有多个线程,多个线程同时执行不同任务,那么就是多线程。

    (三)多线程执行原理

      干活的是CPU。单核cpu同一时间只能处理一个线程。多线程其实就是CPU快速的在多个线程间切换,如果切换的速度很快,就仿佛变成了多线程多个任务同时执行的假象。其实说白了就是任务还是依次执行的,假如执行吃饭和睡觉。只是吃一口,再去睡一下,再吃一口,睡一下,频繁调度罢了。如果线程数很多,频繁切换,效率就会变低!

    (四)多线程优缺点

      优点:提高程序效率,CPU利用率。

         线程上任务执行完毕后,线程会自动从内存中销毁(节约内存)。

      缺点:开辟线程占512K。

           开多了降低性能,并且让程序更加复杂。

    (五)主线程:也就是app默认开启的线程,也是UI线程,用来处理UI问题(各种点击事件,刷新)

        注:千万不要把耗时操作放到主线程,会卡,影响流畅度。

    (六)iOS多线程技术方案

      (1)pthread:跨平台,C语言。

      (2)NSThread:OC封装。用的多的也就是currentThreat看一下线程。

      (3)GCD:自动管理线程生命周期,很常用。

      (4)NSOperation:基于GCD,面向对象。

    (七)多线程访问共享资源问题:当多个线程访问相同一个对象/数据/文件的时候,容易出现数据错误。

      解决:加锁,让某个线程在操作的时候,锁住线程某段代码,在代码执行完毕之前,让别的线程先无法访问。说白了就是如果线程代码加锁,在访问的那一刻,别人就无法访问了。当执行完毕才可以让别的线程访问。

      (1)互斥锁:(只适用OC)@synchronized(self){需要锁定的代码},运用到了线程同步:多条线程按顺序的执行任务。每一个NSObject都有锁,默认是开启的。

      (2)自旋锁:

             atomic(原子属性,自旋锁):线程安全的,单写多读。读,是get方法。单写多读,就是给set方法加锁。然后同一时间,只允许一条线程访问,多个线程可以读取(看一看)。

             nonatomic:线程不安全的。速度快。一般所有属性都会声明称nonatomic,尽量避免多线程抢夺资源。

             其实开发中,前端只需读取,发送操作交互服务器。加锁任务都是服务端处理。

  • 相关阅读:
    centos安装openssl
    centos安装tomcat
    centos安装jdk文件
    shell常用命令
    linux命令: Netstat
    unix-软件安装
    页面校验方式
    软件性能的几个术语指标
    亚马逊的技术架构是怎么样的
    数据挖掘-什么是数据挖掘
  • 原文地址:https://www.cnblogs.com/sgxx/p/5850387.html
Copyright © 2020-2023  润新知