技术标签: 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];
后两种创建线程的方式的优缺点:
优点:简单快捷。
缺点:无法对线程进行更详细的设置。
BOOTSTRAP:btn按钮中的data-toggle属性失效问题BOOTSTRAP:btn按钮中的data-toggle属性失效问题bootstrap中用下拉选组件的时候遇到了点问题一开始这样写,发现失效,找了半天,实际上就是引入的js文件顺序问题。如果说有些组件不使用,其他一些bootstrap功能是可以正常使用的,但是F12会发现报错,后来将jquery库放在最前边就可以了其实...
一上班就开始总结上礼拜写的wifi,先来说说wifi的属性在Android的官方文档中定义了如下五种状态:WIFI_STATE_DISABLED WIFI 不可用WIFI_STATE_DISABLING WIFI 正在关闭WIFI_STATE_ENABLED WIFI 可用WIFI_STATE_ENABLING WIFI 正在打开WIFI_STATE_UNKNOWN WI...
https://www.chromefor.com/转载于:https://www.cnblogs.com/johnyhe/p/10795382.html
有时需要在当前代码中获取当前Server实例的端口号, 通过HttpServletRequest请求可以, 但有时也需要在没有请求的情况下获取到端口号.用以下方法是可以获取到的:public int getHttpPort() {try {MBeanServer server;if (MBeanServerFactory.findMBeanServer(null).size() > 0) {...
视频数据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
如何将知识分离出来?作者在论文中argue到,CNN在设计的过程中有一个固有的无效性,因为他们会将color,shape和纹理信息一起处理(感觉可以找个时间介绍一些,图像中的color,shape或者texture信息对于图像的特征提取有哪些帮助作用)。但是实际上这些不同的信息,比如color或者shape,texture对于识别来说的话,应该是包含不同的数量的信息的。作者举了一个例子...
课程: (中科院)地址第一章人工智能底层的缺失导致智能产业变成空中阁楼为什么有智能计算系统芯片层--->系统层--->算法层--->应用层计算机专业培养计算机整体及子系统的设计者和研究者不但会开车,还会制造汽车计算机系统的研究,算法仅仅是系统的一个环节,算法服务于系统.例如系统(Tensorflow,AlphaGo,TPU(芯片))计算机系统的研究,形成系统思维,拥有更广阔的科研道路.包括集成CPU和智能芯片的异构系统,软件上面向开发者的智能计算编程环境....
《利用CSS3制作网页动画》一、CSS3变形1.早期的动画和特效要依赖于图片、flash或者JavaScript来实现2.CSS3提供了很多新特性,使得动画制作跟以前相比简单且高效了很多3.CSS3动画分2D动画和3D动画,这里重点讲解2D动画,3D动画用法类似4.transform:变化,改变,变形 transformer变形金刚5.通过常用的变形函数,可以实现变形...
前言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(Field-Programmable Gate Array),即现场可编程门阵列,它是作为专用集成电路(ASIC)领域中的一种半定制电路而出现的,既解决了定制电路的不足,又克服了原有可编程器件门电路数有限的缺点。对于时序如何用FPGA来分析与设计,本文将详细介绍。基本的电子系统如图 1所示,一般自己的设计都需要时序分析,如图 1所示的Design,上部分为时序组合逻辑,下部分只有组合...
全文共2653字,预计学习时长10分钟图源:PexelsAnaconda是一个供数据科学家、IT专家,和商业领袖使用的数据科学平台,是Python、R语言等的一个发行版。针对数据科学,它有超过300个软件包,因此它迅速攀升为最好的数据平台之一。本篇导修将会探讨如何运用Anaconda帮助Python编程。以下是本文要探讨的主题:Anaconda介绍安装和启动如何将Python库导入Anaconda...
如果本文对你有用,请爱心点个赞,提高排名,帮助更多的人。谢谢大家!如果解决不了,可以在文末进群交流。写微信支付成功回调的代码,尤其要注意官方文档的一句话:如果不注意这里,支付成功后微信会一直对这个地址进行调用,更新订单的对数据库进行操作,也会一直存在更新:https://pay.weixin.qq.com/wiki/doc/api/H5.php?chapter=9_7&...