学计算机的那个

不是我觉到、悟到,你给不了我,给了也拿不住;只有我觉到、悟到,才有可能做到,能做到的才是我的.

0%

GCD

使用GCD后,可以不用浪费精力去关注线程,你只需要想清楚任务的执行方法(同步还是异步)和队列的运行方式(串行还是并行)即可。

任务是一个抽象概念,表示用来执行的一段代码,可以是一个block或者一个函数

阅读全文 »

并行 和 并发 有什么区别?

并行:充分利用计算机的多核,在多个线程上同步进行 (多个操作同时进行)

并发:在一条线程上通过快速切换,让人感觉在同步进行(多个操作同时存在)

如果某个系统支持两个或者多个动作(Action)同时存在,那么这个系统就是一个并发系统。如果某个系统支持两个或者多个动作同时执行,那么这个系统就是一个并行系统。并发系统与并行系统这两个定义之间的关键差异在于“存在”这个词。

在并发程序中可以同时拥有两个或者多个线程。这意味着,如果程序在单核处理器上运行,那么这两个线程将交替地换入或者换出内存。这些线程是同时“存在”的——每个线程都处于执行过程中的某个状态。如果程序能够并行执行,那么就一定是运行在多核处理器上。此时,程序中的每个线程都将分配到一个独立的处理器核上,因此可以同时运行。

我相信你已经能够得出结论——“并行”概念是“并发”概念的一个子集。也就是说,你可以编写一个拥有多个线程或者进程的并发程序,但如果没有多核处理器来执行这个程序,那么就不能以并行方式来运行代码。因此,凡是在求解单个问题时涉及多个执行流程的编程模式或者执行行为,都属于并发编程的范畴。

摘自:《并发的艺术》 — 〔美〕布雷谢斯

阅读全文 »

基本概念

系统调用

为了保证每一个进程都能安全的执行。现代OS中,CPU运行有两种模式:“用户模式”与“内核模式”。

内核模式下,应用具有对硬件的所有控制权,可以执行所有CPU指令,可以访问任意地址内存,在内核模式下的任何异常都是灾难性的,将会导致整台机器停机。

一些容易发生安全问题的操作都被限制在只有内核模式下才可以执行,例如I/O操作,修改基址寄存器内容等。

用户模式下,应用没有对硬件的直接控制权,也不能直接访问地址的内存,程序是通过调用系统API来达到访问硬件和内存,这种保护模式下,即使应用发生崩溃也是可以恢复的。

应用程序代码运行在用户模式下,当应用程序需要实现内核模式下的指令时,先向系统发送调用请求,操作系统收到请求后,执行系统调用接口,使处理器进入内核模式,当处理器完成系统调用操作后,OS会让处理器返回用户模式,继续执行用户代码。

连接用户模式和内核模式的接口称之为系统调用

应用程序中十大对文件的操作过程就是典型的系统调用过程。

阅读全文 »

为了提高项目中代码的复用,通常会把耦合度低的模块解耦出来做成Pod库放在私有仓库上,很多To B的业务,需要制作SDK给第三方使用,这时候需要提供静态framework给第三方。

阅读全文 »

前言

查了下资料,没找到关于组建化合理的定义,可以理解为模块化,对较大粒度的业务模块进行封装,组件间只有很少的依赖,只关注输入与输出。

阅读全文 »

前言

CocoaPods在首次安装后,不管是search、install还是update,都会强制的升级他的repo。这个repo起到了CocoaPods在本地缓存索引的作用,比如我们进行pod search的时候,实际是在本地进行检索的,这个repo是git上的一个仓库,由CocoaPods官方创建,地址如下:https://github.com/CocoaPods/Specs,存放了CocoaPods支持的各种三方库的信息,每次在执行pod search的时候,首先CocoaPods会主动的pull这个git,确保本地的索引信息是最新的,然后再在本地repo中进行搜索,以保证加载的速度。

阅读全文 »