IOS 中的多线程网络(一)总览及pthread、NSThread_打工人小飞的博客-程序员秘密

技术标签: pthread  进程  多线程  NSThread  iOS 开发  ios  

1. 基本概念

1.1 进程

  进程是指在系统中正在运行的一个应用程序。每个进程之间是独立的,每个进程均运行在其专用且受保护的内存空间内。

1.2 线程

(1)基本概念
 一个进程要想执行任务,必须得有线程(每一个进程至少要有1条线程),线程是进程的基本执行单元,一个进程(程序)的所有任务都在线程中执行。

(2)线程间串行
 1个线程中任务的执行是串行的,如果要在1个线程中执行多个任务,那么只能一个一个地按顺序执行这些任务。也就是说,在同一时间内,1个线程只能执行1个任务。

1.3 多线程

(1)基本概念
 即1个进程中可以开启多条线程,每条线程可以并行(同时)执行不同的任务。

(2)线程的并行
 并行即同时执行。比如同时开启3条线程分别下载3个文件(分别是文件A、文件B、文件C。

(3)多线程并发执行的原理
 在同一时间里,CPU只能处理1条线程,只有1条线程在工作(执行)。多线程并发(同时)执行,其实是CPU快速地在多条线程之间调度(切换),如果CPU调度线程的时间足够快,就造成了多线程并发执行的假象。

(4)多线程优缺点

  优点:
  (1)能适当提高程序的执行效率。
  (2)能适当提高资源利用率(CPU、内存利用率)。
  缺点:
  (1)开启线程需要占用一定的内存空间(默认情况下,主线程占用1M,子线程占用512KB),如果开启大量的线程,会占用大量的内存空间,降低程序的性能。
  (2)线程越多,CPU在调度线程上的开销就越大。
  (3)程序设计更加复杂:比如线程之间的通信、多线程的数据共享。

1.4 多线程在iOS开发中的应用

  1.4.1 主线程
  (1)一个iOS程序运行后,默认会开启1条线程,称为“主线程”或“UI线程”。
  (2)作用。刷新显示UI,处理UI事件。

  1.4.2 使用注意
  (1)不要将耗时操作放到主线程中去处理,会卡住线程。

1.5 IOS中多线程的实现方案

这里写图片描述

2. pthread

pthread 的使用需要包含头文件。
这里写图片描述

3. NSThread

NSThread 创建线程的三种方法:

(1)创建、启动线程

NSThread *thread = [[NSThread alloc] initWithTarget:self selector:@selector(run) object:nil];
[thread start];
// 线程一启动,就会在线程thread中执行self的run方法

主线程相关用法
+ (NSThread *)mainThread; // 获得主线程
- (BOOL)isMainThread; // 是否为主线程
+ (BOOL)isMainThread; // 是否为主线程

+ 获得当前线程
NSThread *current = [NSThread currentThread];

线程的名字
- (void)setName:(NSString *)n;
- (NSString *)name;

(2)创建线程后自动启动线程

[NSThread detachNewThreadSelector:@selector(run) toTarget:self withObject:nil];

(3)隐式创建并启动线程

[self performSelectorInBackground:@selector(run) withObject:nil];

后两种创建线程的方式的优缺点:

优点:简单快捷。
缺点:无法对线程进行更详细的设置。

版权声明:本文为博主原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。
本文链接:https://blog.csdn.net/huangfei711/article/details/57415373

智能推荐

BOOTSTRAP:btn按钮中的data-toggle属性失效问题_这么厉害,要不要在村头摆两桌的博客-程序员秘密

BOOTSTRAP:btn按钮中的data-toggle属性失效问题BOOTSTRAP:btn按钮中的data-toggle属性失效问题bootstrap中用下拉选组件的时候遇到了点问题一开始这样写,发现失效,找了半天,实际上就是引入的js文件顺序问题。如果说有些组件不使用,其他一些bootstrap功能是可以正常使用的,但是F12会发现报错,后来将jquery库放在最前边就可以了其实...

android 获取mac 不开wifi,Android 获取本机的mac和wifi的BSSID(mac)以及其他信息_yongning1984的博客-程序员秘密

一上班就开始总结上礼拜写的wifi,先来说说wifi的属性在Android的官方文档中定义了如下五种状态:WIFI_STATE_DISABLED WIFI 不可用WIFI_STATE_DISABLING WIFI 正在关闭WIFI_STATE_ENABLED WIFI 可用WIFI_STATE_ENABLING WIFI 正在打开WIFI_STATE_UNKNOWN WI...

国内chrome插件网站推荐_weixin_30902251的博客-程序员秘密

https://www.chromefor.com/转载于:https://www.cnblogs.com/johnyhe/p/10795382.html

java获取tomcat端口_获取当前Tomcat实例的端口_weixin_39851048的博客-程序员秘密

有时需要在当前代码中获取当前Server实例的端口号, 通过HttpServletRequest请求可以, 但有时也需要在没有请求的情况下获取到端口号.用以下方法是可以获取到的:public int getHttpPort() {try {MBeanServer server;if (MBeanServerFactory.findMBeanServer(null).size() > 0) {...

用Python3.6将视频数据转化为图片(jpg/png)_LOVEYIPENG的博客-程序员秘密

视频数据avi/mp4都可 前提安装了opencv。使用的是Python3.6import cv2import argparseimport osdef parse_args(): """ Parse input arguments """ parser = argparse.ArgumentParser(description='Process pic') parser.add_argument('--input', help='video to pro

Gated-SCNN: Gated Shape CNNs for Semantic Segmentation论文阅读笔记_YongjieShi的博客-程序员秘密

如何将知识分离出来?作者在论文中argue到,CNN在设计的过程中有一个固有的无效性,因为他们会将color,shape和纹理信息一起处理(感觉可以找个时间介绍一些,图像中的color,shape或者texture信息对于图像的特征提取有哪些帮助作用)。但是实际上这些不同的信息,比如color或者shape,texture对于识别来说的话,应该是包含不同的数量的信息的。作者举了一个例子...

随便推点

智能计算系统(学习笔记)-第二章神经网络_确定阈值逻辑单元的神经网络的参数wji和θj,如右图所示,以计算布尔变量x1和x2的异_oliveQ的博客-程序员秘密

课程: (中科院)地址第一章人工智能底层的缺失导致智能产业变成空中阁楼为什么有智能计算系统芯片层--->系统层--->算法层--->应用层计算机专业培养计算机整体及子系统的设计者和研究者不但会开车,还会制造汽车计算机系统的研究,算法仅仅是系统的一个环节,算法服务于系统.例如系统(Tensorflow,AlphaGo,TPU(芯片))计算机系统的研究,形成系统思维,拥有更广阔的科研道路.包括集成CPU和智能芯片的异构系统,软件上面向开发者的智能计算编程环境....

利用CSS3制作网页动画_css3动画官网_星辉闪烁奇迹的博客-程序员秘密

《利用CSS3制作网页动画》一、CSS3变形1.早期的动画和特效要依赖于图片、flash或者JavaScript来实现2.CSS3提供了很多新特性,使得动画制作跟以前相比简单且高效了很多3.CSS3动画分2D动画和3D动画,这里重点讲解2D动画,3D动画用法类似4.transform:变化,改变,变形 transformer变形金刚5.通过常用的变形函数,可以实现变形...

解决串口猎人软件Component ‘anigif.OCx‘ or one of its dependencies not correctly registered: a file is miss_anigif.ocx无法注册_嵌入式历练者的博客-程序员秘密

前言1.问题描述2.OCX文件介绍(百度而来)3.解决方法4.总结强调1.问题描述串口猎人软件打不开,Component ‘anigif.OCx’ or one of its dependencies not correctly registered: a file is missing or invalid。anigif.ocx是一个ActiveX插件控制模块中必不可少的.ocx文件,当你的计算机一旦出现“缺少anigif.ocx”或者“找不到anigif.ocx”就会导致一些增强型插件外挂无法显

如何利用FPGA进行时序分析设计_李锐博恩的博客-程序员秘密

FPGA(Field-Programmable Gate Array),即现场可编程门阵列,它是作为专用集成电路(ASIC)领域中的一种半定制电路而出现的,既解决了定制电路的不足,又克服了原有可编程器件门电路数有限的缺点。对于时序如何用FPGA来分析与设计,本文将详细介绍。基本的电子系统如图 1所示,一般自己的设计都需要时序分析,如图 1所示的Design,上部分为时序组合逻辑,下部分只有组合...

anaconda如何写python_一文教你如何运用Anaconda帮助Python编程_weixin_39612817的博客-程序员秘密

全文共2653字,预计学习时长10分钟图源:PexelsAnaconda是一个供数据科学家、IT专家,和商业领袖使用的数据科学平台,是Python、R语言等的一个发行版。针对数据科学,它有超过300个软件包,因此它迅速攀升为最好的数据平台之一。本篇导修将会探讨如何运用Anaconda帮助Python编程。以下是本文要探讨的主题:Anaconda介绍安装和启动如何将Python库导入Anaconda...

微信支付接口--支付成功的回调--超详细Demo_微信支付成功回调_梦逸灵箭的博客-程序员秘密

如果本文对你有用,请爱心点个赞,提高排名,帮助更多的人。谢谢大家!如果解决不了,可以在文末进群交流。写微信支付成功回调的代码,尤其要注意官方文档的一句话:如果不注意这里,支付成功后微信会一直对这个地址进行调用,更新订单的对数据库进行操作,也会一直存在更新:https://pay.weixin.qq.com/wiki/doc/api/H5.php?chapter=9_7&amp...

推荐文章

热门文章

相关标签