1 操作系统、进程、线程简单介绍

现在的程序都是在操作系统上跑,很少有裸机的,而且大部分的嵌入式应用也都支持操作系统,当然还有一些很低端的嵌入式设备没有操作系统。

iPhone手机跑的是iOS操作系统(基于Unix改造),操作系统用来管理设备的硬件设备,提供接口API(驱动程序)供不同的APP来调用,从而实现操作硬件,比如通过网卡实现网络访问、相机实现拍照、集成声卡实现发音、蓝牙实现无线传输等等。这里的APP可以简单的理解为一个进程,比如qq、微信、淘宝等等。

在iOS系统中,一个应用程序只允许有一个进程。不过,大家可能见过下图,下拉菜单的"今天",以今日头条为例(简书啥时间也开发个)。"今天"这里的今日头条和我们home页上的是不是一个应用开启的两个进程呢?而且在AppStore下载的时候,只下载了一次,然后这里就有了,难道不是吗?

首先,"今天"里面显示的也是今日头条,也是随AppStore下载时一并下载下来的,不过它只是一个widget,可以理解为它是一个运行在"下拉菜单"这个进程里面的一个线程,如果"今天"被关闭了,那么widget也随之停止运行。

这个是iOS8之后才有的特性,官方叫做扩展(Extension)

每个进程都拥有独立的存储空间沙盒和内存空间,不同的进程之间的内存肯定是不能相互访问,而且存储空间也是不能相互访问的。不过,iOS8之后,苹果推出来App Groups,可以是应用和widget还有Applewatch直接通过[[NSFileManager defaultManager] containerURLForSecurityApplicationGroupIdentifier:@"group.xxx"]函数访问group的内存空间,还需要做一些设置

那我们面试的时候,或者平时提到的进程间通信是怎么回事呢?这个是苹果提供的scheme协议,如下:[[UIApplication sharedApplication] openURL:urlStr];

另外,安卓操作系统是允许多个进程的。

一个进程可以拥有多个线程,线程是真正执行程序流的执行单元。

2 pthread 

一套通用的多线程API,采用C语言编写,跨平台\可移植,适用于Unix\Linux\Windows等系统,但是使用起来难度比较大,生命周期也是由程序员来管理。在iOS编程中很少使用这种方法。

#import <pthread.h>
/// 点击屏幕创建一个线程
- (void)touchesBegan:(NSSet *)touches withEvent:(UIEvent *)event{
pthread_t thread; //创建线程
NSString *str = @"helloWorld"; //创建参数
// 参数1 线程编号的地址
// 参数2 线程的属性
// 参数3 线程要执行的函数(函数指针)(第三个参数可以,demo,*demo, 一般用&demo)
// 参数4 线程要执行的函数的参数
int result = pthread_create(&thread, NULL, &demo, (__bridge void *)(str));
// __bridge oc类型到c语言类型的一个转换
// void *p = (__bridge void *)(str);
NSLog(@"over %d",result);
} /// 线程要执行的函数 传参数
void *(demo)(void *param){
NSString *str = (__bridge NSString *)(param);
NSLog(@"%@",str);
return NULL;
}

iOS多线程实现1-pthread的更多相关文章

  1. [iOS 多线程 & 网络 - 1.0] - 多线程概述

    A.进程 什么是进程进程是指在系统中正在运行的一个应用程序 每个进程之间是独立的,每个进程均运行在其专用且受保护的内存空间内 比如同时打开QQ.Xcode,系统就会分别启动2个进程 通过"活 ...

  2. iOS 多线程:『RunLoop』详尽总结

    1. RunLoop 简介 1.1 什么是 RunLoop? 可以理解为字面意思:Run 表示运行,Loop 表示循环.结合在一起就是运行的循环的意思.哈哈,我更愿意翻译为『跑圈』.直观理解就像是不停 ...

  3. iOS多线程与网络开发之多线程概述

    郝萌主倾心贡献,尊重作者的劳动成果,请勿转载. 假设文章对您有所帮助,欢迎给作者捐赠.支持郝萌主,捐赠数额任意,重在心意^_^ 我要捐赠: 点击捐赠 Cocos2d-X源代码下载:点我传送 游戏官方下 ...

  4. iOS多线程技术方案

    iOS多线程技术方案 目录 一.多线程简介 1.多线程的由来 2.耗时操作的模拟试验 3.进程和线程 4.多线程的概念及原理 5.多线程的优缺点和一个Tip 6.主线程 7.技术方案 二.Pthrea ...

  5. iOS多线程学习

    在 iOS 中其实目前有 4 套多线程方案,他们分别是: Pthreads NSThread GCD NSOperation & NSOperationQueue 所以接下来,我会一一讲解这些 ...

  6. iOS多线程

    关于iOS多线程 概述 这篇文章中,我不会说多线程是什么.线程和进程的区别.多线程有什么用,当然我也不会说什么是串行.什么是并行等问题,这些我们应该都知道的. 在 iOS 中其实目前有 4 套多线程方 ...

  7. iOS多线程解析

    在这篇文章中,我将为你整理一下 iOS 开发中几种多线程方案,以及其使用方法和注意事项.当然也会给出几种多线程的案例,在实际使用中感受它们的区别.还有一点需要说明的是,这篇文章将会使用 Swift 和 ...

  8. 关于iOS多线程的总结

    关于iOS多线程的总结   在这篇文章中,我将为你整理一下 iOS 开发中几种多线程方案,以及其使用方法和注意事项.当然也会给出几种多线程的案例,在实际使用中感受它们的区别.还有一点需要说明的是,这篇 ...

  9. iOS多线程-01-pthread与NSTread

    简介 恰当的使用多线程编程可以提供任务的执行效率和系统资源的利用率 多线程是为了提高资源利用率,和应用程序的响应速度,多个线程共享应用资源 每个应用程序都有一个主线程,通常用来做UI界面刷新等 比较耗 ...

  10. iOS多线程知识总结--GCD

    iOS多线程知识总结--GCD 1. iOS中苹果提供4钟方案来帮助我们实现多线程: (1) 纯C语言的pthread,偏底层,需要程序员手动管理线程的生命周期,基本不用. (2) OC语言的NSTr ...

随机推荐

  1. Qt实现小功能之列表无限加载

    概念介绍 无限加载与瀑布流的结合在Web前端开发中的效果非常新颖,对于网页内容具备较好的表现形式.无限加载并没有一次性将内容全部加载进来,而是通过监听滚动条事件来刷新内容的.当用户往下拖动滚动条或使用 ...

  2. 十年微软(Microsoft)MVP

    十年微软(Microsoft)MVP,七月一日收到邮件,今早收到从美国微软寄过来的证书!

  3. ASP.NET MVC文章附加有源码下载的文章

    很多一段时间以来,Insus.NET有分享很多有关ASP.NET MVC的文章,每隔一段时间,会把源码以及数据库分享供大家下载. 你可以按时间排序,文章越新,源码以及数据数据也就越新. 你可以从下面的 ...

  4. asp.net后台注册js的四种方法

    1. 用Response.Write方法 代码如下: Response.Write("<script type='text/javascript'>alert("kel ...

  5. C#系统缓存全解析(转载)

    C#系统缓存全解析 对各种缓存的应用场景和方法做了很详尽的解读,这里推荐一下 转载地址:http://blog.csdn.net/wyxhd2008/article/details/8076105

  6. Win10怎么输入法切换

    按 windows 键+空格键,或者CTRL+Shift,或者只按 Shift,或者CTRL+空格 试试 方法/步骤1在桌面上点击[控制面板],进入控制面板后使用分类显示控制面板内的选项.然后在语言下 ...

  7. MySQL MHA配置常见问题

    MHA在MySQL数据库中被广泛使用,它小巧易用,功能强大,实现了基于MySQL replication架构的自手动主从故障转移,从库重定向到主库并自动同步.尽管如此,在部署配置的过程中,由于疏忽总难 ...

  8. Tsung测试Tigase

    用两台主机坐Tigase的Tsung测试,其中1台运行Tigase,另1台运行Tsung. 1.Tigase服务器设置 tigase.conf: #osgiEnabled=(true|false) # ...

  9. 第 11 章 进度条媒体对象和 Well 组件

    学习要点: 1.Well 组件 2.进度条组件 3.媒体对象组件 主讲教师:李炎恢 本节课我们主要学习一下 Bootstrap 的三个组件功能:Well 组件.进度条组件.媒体对象组件. 一.Well ...

  10. C#实现WebService服务 项目完整总结

    先说一下这个项目做了什么.先介绍一下背景(备注一下,每次项目发生更改之后,要进行clean 和rebuild两个操作,否则最新的更改保存不到exe文件中,这样上线后的系统还是执行得原有的已编译过的程序 ...