线程

ios GCD 详解2

自作多情 提交于 2020-04-03 05:24:36
GCD是和block紧密相连的,所以最好先了解下block。GCD是C level的函数,这意味着它也提供了C的函数指针作为参数。 下面首先来看GCD的使用: dispatch_async ( dispatch_queue_t queue , dispatch_block_t block ) ; async 表明 异步 运行,除了async,还有 sync (同步), delay (延时) block 代表的是你要做的事情, queue 则是你把任务交给谁来处理了. dispatch_async 这个函数是异步的,这就意味着它会立即返回而不管block是否运行结束。因此,我们可以在block里运行各种耗时的操作(如网络请求) 而同时不会阻塞UI线程。 之所以程序中会用到多线程是因为 程序往往会需要读取数据,然后更新UI。为了良好的用户体验,读取数据的操作会倾向于在后台运行,这样以避免阻塞主线程。 GCD里就有三种queue来处理. 1. Main queue:   顾名思义,运行在主线程,由 dispatch_get_main_queue 获得。和UI相关的就要使用Main Queue . main dispatch queue 是一个全局可用的串行队列,其在行用程序的主线程上执行任务。此队列的任务和应用程序的主循环( run loop )要执行的事件源交替执行

java常见笔试题

為{幸葍}努か 提交于 2020-04-03 05:24:12
JAVA 相关基础知识 1 、面向对象的特征有哪些方面 1. 抽象 : 抽象就是忽略一个主题中与当前目标无关的那些方面,以便更充分地注意与当前目标有关的方面。抽象并不打算了解全部问题,而只是选择其中的一部分,暂时不用部分细节。抽象包括两个方面,一是过程抽象,二是数据抽象。 2. 继承 : 继承是一种联结类的层次模型,并且允许和鼓励类的重用,它提供了一种明确表述共性的方法。对象的一个新类可以从现有的类中派生,这个过程称为类继承。新类继承了原始类的特性,新类称为原始类的派生类(子类),而原始类称为新类的基类(父类)。派生类可以从它的基类那里继承方法和实例变量,并且类可以修改或增加新的方法使之更适合特殊的需要。 3. 封装 : 封装是把过程和数据包围起来,对数据的访问只能通过已定义的界面。面向对象计算始于这个基本概念,即现实世界可以被描绘成一系列完全自治、封装的对象,这些对象通过一个受保护的接口访问其他对象。 4. 多态性 : 多态性是指允许不同类的对象对同一消息作出响应。多态性包括参数化多态性和包含多态性。多态性语言具有灵活、抽象、行为共享、代码共享的优势,很好的解决了应用程序函数同名问题。 2 、 String 是最基本的数据类型吗 ? 基本数据类型包括 byte 、 int 、 char 、 long 、 float 、 double 、 boolean 和 short 。

iOS多线程GCD

懵懂的女人 提交于 2020-04-03 05:22:56
GCD是和block紧密相连的,所以最好先了解下block。GCD是C level的函数,这意味着它也提供了C的函数指针作为参数。 下面首先来看GCD的使用: dispatch_async(dispatch_queue_t queue, dispatch_block_t block); async表明异步运行,除了async,还有sync(同步),delay(延时) block代表的是你要做的事情, queue则是你把任务交给谁来处理了. dispatch_async 这个函数是异步的,这就意味着它会立即返回而不管block是否运行结束。因此,我们可以在block里运行各种耗时的操作(如网络请求) 而同时不会阻塞UI线程。 之所以程序中会用到多线程是因为程序往往会需要读取数据,然后更新UI。为了良好的用户体验,读取数据的操作会倾向于在后台运行,这样以避免阻塞主线程。 GCD里就有三种queue来处理. 1. Main queue:   顾名思义,运行在主线程,由dispatch_get_main_queue获得。和UI相关的就要使用Main Queue. main dispatch queue 是一个全局可用的串行队列,其在行用程序的主线程上执行任务。此队列的任务和应用程序的主循环(run loop)要执行的事件源交替执行。因为其运行在应用程序的主线程,main

GCD简介

谁说胖子不能爱 提交于 2020-04-03 05:22:05
本文转自 http://www.cnblogs.com/sell/archive/2013/02/06/2905772.html GCD ( Grand Central Dispatch ) 是Apple公司开发的一种技术,它旨在优化多核环境中的并发操作并取代传统多线程的编程模式。 在Mac OS X 10.6和IOS 4.0之后开始支持GCD。 使用GCD的一个理由就是方便。回想一下以前的多线程编程,我们会把异步调用的代码放到另外的一个函数中,并通过NSThread开启新线程来启动这段代码。 这种跳来跳去的流程对于复杂的逻辑简直就是一场灾难。更糟糕的是,调用线程时的环境对异步代码是不可见的,如果我们需要当时的临时变量的话只有两个选择: 保存到类成员变量中或者作为参数传递过去。前者会造成很多莫名奇妙的无关类成员,而后者的功能过于有限。 GCD相对来说是一种更优雅的方式,看如下代码: NSString* parameter = [self getSomeParameter]; dispatch_async(dispatch_get_global_queue(DISPATCH_QUEUE_PRIORITY_DEFAULT, 0), ^{ NSString* result = [self fetchResultFromWebWithParameter:parameter];

第十三周学习笔记

自作多情 提交于 2020-04-02 21:47:54
第十二章 并发编程 进程是程序级并发,线程是函数级并发。 三种基本的构造并发程序的方法: 进程: 每个逻辑控制流是个一个进程,由内核进行调度和维护。 I/O 多路复用: 应用程序在一个进程的上下文中显式地调度他们自己的逻辑流。 线程: 运行在单一进程上下文中的逻辑流,由内核进行调度。 12.1 基于进程的并发编程 构造并发程序最简单的方法就是 用进程。 使用大家都很熟悉的函数例如: fork exec waitpid 关于在父、子进程间共享状态信息:共享文件表,但不共享用户地址空间。 进程又独立的地址空间既是优点又是缺点: 优点:防止虚拟存储器被错误覆盖 缺点:开销高,共享状态信息才需要IPC机制 12.2 基于I/O多路复用的并发编程 就是使用select函数要求内核挂起进程,只有在一个或多个I/O事件发生后,才将控制返回给应用程序。 select函数处理类型为fd_set的集合,也叫做 描述符集合。 select函数有两个输入:一个称为 读集合 的描述符集合和该妒忌和该读集合的基数(n)(实际上是任何描述符集合的最大基数)。select函数会一直阻塞,直到读集合中至少有一个描述符准备好可以读。当且仅当一个从该描述符读取一个字节的请求不会阻塞时,描述符K就表示准备好可以读了。 作为一个副作用,select修改了参数fdset指向的fd_set,指明读集合中一个称为准备好集合的子集

多线程学习笔记

…衆ロ難τιáo~ 提交于 2020-04-02 21:42:51
一、多线程简介    我们所说的 Windows是一个多任务操作系统,是说Windows能同时执行多个程序。当我们每运行一个程序的时候其实就开启了一个进程,进程中包含了这个程序运行所需要的文本代码、变量和动态分配的内存、堆栈等资源,进程之间先对独立,一个进程不会干扰另一个进程的运行。在.net中进程可以包含多个应用程序域和线程,应用程序域是一个逻辑区域(不做详细介绍)。线程是进程中的基本执行单元,线程可以帮一个进程同时做多件事,线程主要由线程ID,当前指令指针(PC),寄存器集合和堆栈组成,同一进程的多个线程可以在宏观上并发的执行,但在微观上CPU同时只能执行一个线程,所以线程也就有了就绪,阻塞,运行三种状态,具体CPU执行那个线程这由 系统 根据线程的优先级决定。程序入口的线程叫主线程,在.net中就是Main()方法作为入口的,调用Main()方法系统就会创建一个主线程。   所谓多线程就是在一个进程内运行多个线程来协同完成工作,这样能在一定程度上提高程序的性能,最明显的就是在做winform开发的时候,如果不用多线程,当我们处理数据的时候程序界面是卡死的,这就是因为在只有一个线程的时候,处理数据的和UI是在一个线程(主线程)中,但处理数据的时候这个线程是不会去处理前台UI的,所以我们会感觉程序卡死了。多线程的缺点就是CPU要花时间来处理要执行那个线程..... 二、

【操作系统】进程和线程的一些问题

家住魔仙堡 提交于 2020-04-02 20:31:38
进程 进程间的通信方式 1.共享存储 2.消息传递 3.管道通信 进程调度算法: 1.先来先服务 2.短作业优先 3.优先权调度 4.高响应比优先调度算法 5.时间片的轮转调度算法 进程的状态与转换: NULL→新建态:执行一个程序,创建一个子进程。 ​ 新建态→就绪态:当操作系统完成了进程创建的必要操作,并且当前系统的性能和虚拟内存的容量均允许。 ​ 运行态→终止态:当一个进程到达了自然结束点,或是出现了无法克服的错误,或是被操作系统所终结,或是被其他有终止权的进程所终结。 ​ 运行态→就绪态:运行时间片到;出现有更高优先权进程。 ​ 运行态→等待态:等待使用资源;如等待外设传输;等待人工干预。 ​ 就绪态→终止态:未在状态转换图中显示,但某些操作系统允许父进程终结子进程。 ​ 等待态→终止态:未在状态转换图中显示,但某些操作系统允许父进程终结子进程。 ​ 终止态→NULL:完成善后操作 线程 进程和线程的区别: 1.进程是拥有资源和独立调度的基本单位,线程是一个基本的CPU执行单元。 2.同一进程中,线程的切换不会引起进程的切换。不同的进程中线程的切换会引起进程的切换。 3。创建和撤销进程和 参考: 进程线程调度算法 https://blog.csdn.net/jinjiniao1/article/details/97636072 来源: https://www.cnblogs

Java IO7:管道流、对象流

為{幸葍}努か 提交于 2020-04-02 20:27:00
一、前言   前面的文章主要讲了文件字节输入流FileInputStream、文件字节输出流FileOutputStream以及对应的字节缓冲流,文件字符输入流FileReader、文件字符输出流FileWriter以及对应的字符缓冲流,这些都是常见的流类。当然,除了这些流类,Java还提供了别的流类供用户使用,接下来看一下管道流和对象流。 二、管道流   管道流主要用于连接两个线程的通信,充当一个信息传递的管道。管道流也分为字节流(PipedInputStream、PipedOutputStream)和字符流(PipedReader、PipedWriter)。比如一个管道输出流PipedOutputStream必须和一个管道输入流PipedInputStream进行连接而产生一个通信管道,管道输出流PipedOutputStream向管道中写入数据,管道输入流PipedInputStream从管道中读取数据。管道流的工作如下图所示:         举例说明管道流的用法。既然管道流的作用适用于线程之间的通信,那么势必会有发送信息的线程和接收信息的线程,先定义一个发送数据的线程,通过管道输出流的write()方法将数据写入到管道中。 public class SendDataThread implements Runnable{ private PipedOutputStream

系统问题需要下载

蓝咒 提交于 2020-04-02 20:24:40
并发的优点在操作系统单核的时候就体现了,最好的体现就是操作系统中线程的调度。而我们能做哪种并发,取决于操作系统能做哪种并发,没有人会以为自己写的程序真的能创建线程。 下面是个人的一些使用过得并发路子,由于接触有限只是用下面4种。 正文 1.多线程 采用多个线程来执行程序。在此指狭隘的多线程概念,比如说一个程序,执行不同类型的任务采用不同的线程,这些线程一直伴随着程序的生命周期。 2.并行处理 是多线程中的一种。把正在执行的大量任务分割成小块,分配给多个同时运行的程序。 下面是百度百科的概念: 并行处理(Parallel Processing)是计算机系统中能同时执行两个或多个处理的一种计算方法。并行处理可同时工作于同一程序的不同方面。并行处理的主要目的是节省大型和复杂问题的解决时间。 为使用并行处理,首先需要对程序进行并行化处理,也就是说将工作各部分分配到不同处理进程(线程)中。并行处理由于存在相互关联的问题,因此不能自动实现。另外,并行也不能保证加速。从理论上讲,在 n 个并行处理的执行速度可能会是在单一处理机上执行的速度的 n 倍。 狭隘的多线程解决不同类型的任何互不干预。而并行处理则是从任务的角度分割,切换成小而完整的任务,利用多线程去实行并行处理。 之所以会有这种模式,是因为我们会有大的任务,这会影响其他任务的执行,不可能把苹果都放在一个篮子里面。 3.异步编程

用 Hystrix 构建高可用服务架构

*爱你&永不变心* 提交于 2020-04-02 15:02:06
1.Hystrix 是什么? 在分布式系统中,每个服务都可能会调用很多其他服务,被调用的那些服务就是依赖服务,有的时候某些依赖服务出现故障也是很正常的。 Hystrix 可以让我们在分布式系统中对服务间的调用进行控制,加入一些调用延迟或者依赖故障的容错机制。 Hystrix 通过将依赖服务进行资源隔离,进而阻止某个依赖服务出现故障时在整个系统所有的依赖服务调用中进行蔓延;同时Hystrix 还提供故障时的 fallback 降级机制。 总而言之,Hystrix 通过这些方法帮助我们提升分布式系统的可用性和稳定性。 2.Hystrix 的历史 Hystrix 是高可用性保障的一个框架。Netflix(可以认为是国外的优酷或者爱奇艺之类的视频网站)的 API 团队从 2011 年开始做一些提升系统可用性和稳定性的工作,Hystrix 就是从那时候开始发展出来的。 在 2012 年的时候,Hystrix 就变得比较成熟和稳定了,Netflix 中,除了 API 团队以外,很多其他的团队都开始使用 Hystrix。 时至今日,Netflix 中每天都有数十亿次的服务间调用,通过 Hystrix 框架在进行,而 Hystrix 也帮助 Netflix 网站提升了整体的可用性和稳定性。 2018 年 11 月,Hystrix 在其 Github 主页宣布,不再开放新功能