进程与线程

Linux·C/C++主线程对子线程的影响 主线程对子线程的影响 阅读详情
主线程里面执行耗时操作会导致界面阻塞,所以一般把耗时操作放到子线程执行,例如网络请求、线程睡眠、加载文件、大量运算。
1、不要把耗时操作放到主线程。
2、不要把修改页面的代码放到子线程(子线程修改页面不会等到及时更新)

第一种开启子线程的方法
NSThread
     //开启一个子线程
     [NSThread detachNewThreadSelector:@selector(createMouse)toTarget:self withObject:nil];

     //返回主线程
     [self performSelectorOnMainThread:@selector(updateUI:)withObject:self.mouse waitUntilDone:NO];

第二种开启子线程的方法
GCD
Grand Central Dispatch (GCD)是Apple开发的一个多核编程的解决方法,自己创建的线程队列为串行队列,获取系统提供的线程队列为并行队列。
    //开启一个子线程
   
dispatch_async(dispatch_get_global_queue(DISPATCH_QUEUE_PRIORITY_DEFAULT,0), ^{
       
       
NSData *data = [NSDatadata WithContentsOfURL:[NSURLURLWithString:self.imagaPaths[indexPath.row]]];
       
UIImage *image = [UIImageimage WithData:data];
       
       
//返回主线程
       
dispatch_async(dispatch_get_main_queue(), ^{
            cell.
imageView.image= image;
            [cell 
setNeedsLayout];
        });
    });

第三种开启子线程的方法
NSOperation
创建出来的线程队列默认为并行队列。
- (void)viewDidLoad
{
    [super viewDidLoad];
   
    //方式一开启一个线程
    NSOperation *op1 = [[NSInvocationOperation alloc]initWithTarget:self selector:@selector(newThreadAction)object:nil];
   
    //方式二开启一个线程
    NSOperation *op2 = [NSBlockOperation blockOperationWithBlock:^{
        for (int i=0; i<5; i++) {
            [NSThread sleepForTimeInterval:.5];
            NSLog(@"线程2--%d",i);
        }
    }];
   
    //创建线程队列,默认创建出来的线程队列为并行队列
    NSOperationQueue *myQueue = [[NSOperationQueue alloc]init];
    //设置最大同时执行的线程数量
    [myQueue setMaxConcurrentOperationCount:1];
    //给op1添加一个依赖依赖op2
    [op1 addDependency:op2];
    //将线程添加到队列,线程添加到队列后才会执行
    [myQueue addOperation:op1];
    [myQueue addOperation:op2];
}

- (void)newThreadAction{
    for (int i=0; i<5; i++) {
        [NSThread sleepForTimeInterval:.5];
        NSLog(@"线程1--%d",i);
    }
}


GCD与NSOperation的区别
1、GCD,代码更简洁,使用更加方便,GCD更加高效,因为属于C语言的语法,更底层。
2、NSOperation,灵活控制线程之间的关系,可以设置同时执行的线程数量。
    //设置最大同时执行的线程数量,如果设置为1,则相当于线程串行执行
    [myQueue setMaxConcurrentOperationCount:1];
    //给op1添加一个依赖依赖op2,先执行op2,再执行op1
    [op1 addDependency:op2]; 
Antlr4入门(二)基本概念解析 在上一章中(Antlr4入门(一)IDEA中Antlr的安装与使用),我们安装了Antlr,并编写运行了第一个程序“Hello world”。而在本章中,我们将学习语言类应用程序相关的重要过程、术语和数据结构。 一. 术语 语言(language)是由一系列有意义的语句组成,语句(sentence)由词组组成,词组(phrase)是由更小的子词组(subphrase)和词汇符号(vocabulary symbols)组成。 举个例子,英语就是一种语言,“Keep on going never gi. 阅读详情

相关推荐

Q学习(Q-learning)入门小例子及python实现

一、从马尔科夫过程到Q学习 # 有一定基础的读者可以直接看第二部分 Q学习(Q-learning)算法是一种与模型无关的强化学习算法,以马尔科夫决策过程(Markov Decision Processes, MDPs)为理论基础。 标准的马尔科夫决策过程可以用一个五元组<S,A,P,R,γ>表示,其中: S是一个离散有界的状态空间; A是一个离散的动作空间; P为状态转...

wlm_py的博客 4万+

iOS 耗时操作放在子线程,阻止线程阻塞

//这里应该开辟一个子线程去请求苹果服务器          dispatch_async(dispatch_get_global_queue(DISPATCH_QUEUE_PRIORITY_DEFAULT, 0), ^{          //        [self goDoSomethingLongAndInvolved];         DSLog(@"

疯狂的程序猿的博客 7549

自学PCB思路 | PCB设计零基础入门-小白适用(附详细入门经验分享)

本人大一在实践课上就听说PCB,被虎的一楞一楞的,不过现在回看,发现其实并没有相信的那么难!想着把自己这一路摸索的学习路线分享一下,当时我是一边摸索一边上手,一把鼻涕一把泪的过来的。如果你想搞硬件或者需要搞硬件,下面是我的入门学习过程,希望可以帮到你。目录前言选择一款设计软件好的入门课程掌握抄板元件采购焊板子烙铁头热风枪自己半设计明确设计需求全设计最后我并非什么大佬,也没法自己去教大家如何画板。

自动化小秋葵的博客 1万+

UI访问在主线程、耗时操作在子线程的原因

Android规定,访问UI只能在主线程中进行,若在子线程中进行UI访问,就会抛出异常。 Q:系统为何要求不能在子线程中访问UI? A:Android的UI控件不是线程安全的,多线程并发的访问,可能造成UI控件不可预期的状态。 Q:为何系统不对UI控件的访问加上锁机制呢?这样就可以多线程并发访问了。 A:1.加上锁机制后,会使UI控件的访问逻辑变复杂;2.加锁之后,UI访问效率变低,因为锁...

lyl0530的博客 1523

【动态导通电阻】p-GaN HEMTs正向和反向导通下的动态导通电阻

2024年,浙江大学的研究团队通过多组双脉冲测试方法,深入研究了两种商用p-GaN栅极HEMTs在正向和反向导通模式下的动态导通电阻(RON)特性。研究发现,肖特基型p-GaN栅极HEMTs在反向导通时动态RON比正向导通高3%-5%,而混合漏极嵌入栅注入晶体管在反向导通时动态RON降级较轻,降低约10%。此外,随着漏极电流(IDS)的增加,两种器件在反向导通时动态RON先减小后增加,形成“谷底”现象。

荷塘阅色 825

手把手教你学SOC芯片架构--NoC(片上网络,Network on Chip)全方位解析

​、​。

MHD0815的博客 863

UI系统中的耗时操作处理

在框架中事件处理和UI绘制处于同一线程中,如果一个事件处理占用了大量的时间势必造成用户操作UI不响应的问题。因此,耗时操作必须放到事件线程之外的线程中处理,这个必须由客户端程序自己保证

Romantic_Energy的专栏 1278

Python爬虫实战:绕过Cloudflare反爬的最新技术与完整代码详解

在互联网数据采集领域,越来越多的网站开始部署CDN和安全防护服务,其中 Cloudflare 是最为广泛使用的防护方案之一。它不仅为网站提供DDoS防护,还能通过JS挑战、验证码和行为分析来识别并拦截爬虫。这给爬虫工程师带来了极大挑战——如何在不违反网站服务条款的情况下,实现有效的数据采集?本文将分享Python领域绕过Cloudflare反爬的最新技术方法,结合最新流行库与自动化浏览器,帮助你攻克这一难题。绕过Cloudflare反爬不是一蹴而就,需结合多技术、多策略,持续迭代。

2201_76125261的博客 2628

什么是进程,进程与线程之间的关系!!!

什么是进程,进程与线程之间的关系!!! 首先我们先讲解进程,进程是什么呢!!! 进程:是指系统正在运行的一个应用程序(手机上可以理解为一个App,PC上可以理解为程序),是系统进行资源分配和调度的基本单位。一个程序或者应用至少有一个进程。 线程:线程呢则是CPU调度最小(比进程更小)的能独立运行的执行单元,也是有限的系统资源。 两者之间的关系:一个进程之间至少包含一个或多个线程,(包含的关系)进程有一个独立的运行空间,其中的线程共享此空间,也拥有此进程的全部资源,,,因此可以并发(并行)执行。 创建线程的

Adorablenewwhite的博客 1001

《UDS协议从入门到精通》系列——图解0x83:访问时间参数

详细介绍UDS协议0x83服务,目标ECU的时序参数设置有哪些注意点?

车载系统攻城狮 2138

基于YOLOv8/YOLOv7/YOLOv6/YOLOv5的田间杂草检测系统(深度学习模型+UI界面+Python代码+训练数据集)

精准农业是现代农业发展的核心方向,其中杂草的实时、准确检测是减少除草剂滥用、实现变量喷施的关键技术瓶颈。本文详细阐述了一套完整的、基于YOLO(You Only Look Once)系列目标检测算法的田间杂草检测系统。系统覆盖从模型对比选型(YOLOv5, YOLOv6, YOLOv7, YOLOv8)、自定义数据集构建与标注、模型训练与优化,到最终构建基于PyQt5/FastAPI/Gradio的可视化UI界面的全流程。本文提供了完整的Python代码、项目结构、训练技巧及公开数据集指引,旨在为农

YOLO 357

进程与线程的关系

进程和线程并非互斥,现代系统常结合两者构建复杂架构。例如:通过多进程实现服务隔离,每个进程内用多线程提升任务处理效率,从而平衡性能、稳定性和开发复杂度。进程和线程是操作系统中实现多任务处理的核心概念,二者既有区别又密切关联。

sre救赎之路 1508

基于MATLAB的多无人机多任务调度算法——CBBA带时间窗

本文将介绍基于MATLAB的CBBA算法,并对其进行改进,加入时间窗概念,以提高多无人机系统的调度效率和性能。时间窗用于限定任务的执行时间范围,以避免任务执行时间过长或过短导致的问题。具体而言,我们为每个任务设置一个允许的最早开始时间和最晚结束时间,并在任务分配的过程中考虑这些时间约束。在多无人机系统中,需要将若干个任务分配给不同的无人机完成,以实现高效的任务执行。以上是关于基于MATLAB的多无人机多任务调度算法CBBA带时间窗的简要介绍和源代码实现。多无人机系统的调度问题。

BUG?不存在的! 1897

进程与线程相关

进程与线程的区别 进程是资源分配最小单位,线程是程序执行的最小单位; 进程有自己独立的地址空间,每启动一个进程,系统都会为其分配地址空间,建立数据表来维护代码段、堆栈段和数据段,线程没有独立的地址空间,它使用相同的地址空间共享数据; CPU切换一个线程比切换进程花费小; 创建一个线程比进程开销小; 线程占用的资源要⽐进程少很多。 线程之间通信更方便,同一个进程下,线程共享全局变量,静态变量等数据...

qq_32534441的博客 463

WINCC7.3破解文件

WINCC7.3硬件够破解文件,有需要的下载!WINCC7.3硬件够破解文件,有需要的下载!

NTscan扫描工具

ntscan是一个扫描器,可以扫描没有密码和弱密码的共享,先到配置文件中填写猜测的用户名和密码,扫描过程中右侧出现的是扫描日志。

线程与进程

本文主要介绍了进程与线程的概念、区别及其在Python中的实现。进程是操作系统资源分配的基本单位,每个进程拥有独立的内存空间;线程是程序执行的最小单位,共享进程资源但拥有独立执行栈。文章通过代码示例展示了Python中multiprocessing模块创建子进程,以及threading模块实现多线程的方法,重点讲解了进程锁(Lock)解决并发安全问题、守护进程特性以及线程计时器的应用。最后对比了两者的核心差异:进程是资源容器,线程是执行单元,前者稳定性高但开销大,后者轻量但需注意共享资源安全。

m0_74350616的博客 1202

OV9734 DATASHEET,完整规格书

OV9734完整规格书,包括电气参数,尺寸规格,寄存器配置表等

进程与线程浅谈

进程与线程的基础总结。

wahkim的博客 868

蓝牙模块HM-10手册

蓝牙模块HM-10手册,该手册对蓝牙模块HM-10进行了详细的介绍和使用方法以及一些AT指令。

Linux进程与线程

在本文章中,我们将要详细介绍一下Linux中有关进程相关的内容。以上就是我们Linux进程与线程相关的介绍,希望对大家的学习有所帮助,仅供参考 如有错误请大佬指点我会尽快去改正 欢迎大家来评论~~

lim6ere的博客 1406

【Linux 线程与进程】线程与进程技术基础

线程是CPU调度的最小单位,属于同一进程的线程共享进程的全局内存、文件描述符等资源,但拥有独立的栈和程序计数器。进程是操作系统资源分配的基本单位,每个进程拥有独立的虚拟地址空间、文件描述符、信号处理等资源。系统调用创建子进程,子进程复制父进程的资源(写时复制优化)。‌是经典的同步问题,通过互斥锁保护共享资源,条件变量实现线程间协调。‌:进程间资源隔离,崩溃不会直接影响其他进程46。‌:高效数据共享,需配合信号量同步。‌:结构化数据传输,支持多进程通信。‌:单向通信,适用于父子进程。回收资源,避免僵尸进程。

以实战经验介绍行业知识 1461

线程和进程的区别与联系以及单线程多进程与单进程多线程的区别

线程和进程 概念 进程(process):是指具有已一定功能的独立程序,是系统资源分配的基本单位,在内存中有其完备的数据空间和代码空间,拥有完整的虚拟空间地址。一个进程所拥有的数据和变量只属于它自己。 线程(thread):是进程内相对独立的可执行单元,所以也被称为轻量进程(lightweight processes);是操作系统进行任务调度的基本单元。它与父进程的其它线程共享该进程所拥有的全部代...

VicterTian的博客 3408

linux进程与线程

创建完成后,通过特定的标识或条件,可以清晰地区分父子进程的代码逻辑,从而实现不同的功能和任务分配。以一个图形处理软件为例,一个进程中可能有多个线程,分别负责图像的读取、处理和显示,即使某个处理线程结束,只要其他线程仍在运行,进程就会继续存在。但此时,主线程的结束并不意味着整个进程的结束,只有当进程内的其他线程也都结束后,进程才会终止。在一个多线程程序中,各个线程的地位是平等的,它们按照操作系统的调度策略并发执行。线程的结束并不一定会导致所属进程的结束,只有当进程内的所有线程都结束时,进程才会真正终止。

lijiaweixx的博客 1242

深入解析进程与线程:从原理到实践

本文深入解析了操作系统中的进程与线程概念。进程是资源分配的基本单位,拥有独立地址空间,安全性高但开销大;线程是调度的基本单位,共享进程资源,轻量级但独立性低。文章详细对比了两者在资源开销、通信机制、安全性等方面的差异,并提供了应用场景建议。此外,还介绍了进程管理相关命令(top/df)、并发与并行的区别、fork/vfork机制、僵尸/孤儿进程处理等核心知识点,为开发高性能应用提供了系统级的理论基础。

2301_78884150的博客 1459

线程与进程的区别

多线程共存于应用程序中是现代操作系统中的基本特征和重要标志。用过UNIX操作系统的读者知道进程,在UNIX操作系统中,每个应用程序的执行都在操作系统内核中登记一个进程标志,操作系统根据分配的标志对应用程序的执行进行调度和系统资源分配,但进程和线程有什么区别呢?进程和线程都是由操作系统所体会的程序运行的基本单元,系统利用该基本单元实现系统对应用的并发性。进程和线程的区别在于:线程的划分尺度小

Piggy and Jery 's GOLB 2万+
上一篇: 地图框架
下一篇: iOS中Block介绍(一)基础
BobooO
博客等级 码龄18年 29粉丝 23原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值